[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/10 00:45 / Filesize : 237 KB / Number-of Response : 985
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 23



1 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 12:49:22 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 22
pc11.2ch.net/test/read.cgi/tech/1196489491/

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 101
pc11.2ch.net/test/read.cgi/tech/1197132472/

474 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:18:46 ]
_beginthreadexでウィンドウハンドルを渡したいんですが、
どうすればいいですかね?

475 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:19:25 ]
スレ違い

476 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:19:57 ]
第3引数から渡すれ

477 名前:440 [2007/12/31(月) 23:21:05 ]
なんとか理解しました

>>460さんのが分かりやすかったです

まだ完全理解したという訳ではないので勉強してみます
回答してくれた皆様ありがとうございました。

478 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:23:03 ]
おそらくスタックがどんな感じなのかわかっていないかな?

iがスタック上に積まれる他に関数呼び出しによる復帰情報(ここだとtest()関数な)がスタック上に積まれるんよ
復帰情報は関数が何処に戻れば良いかを示すリターンアドレスが格納されている
ここではまだ実行されていないprintf()の直前

つまりイメージとしては
復帰←0←復帰←1←復帰←3←復帰…8→復帰←9←復帰
と積まれる(push)

でループから抜けると

今度は
復帰情報→0→復帰→1→復帰→3→復帰…8→復帰→9→復帰
と逆に飛び出してくる(pop)

つまりLIFO(Last In First Out)な訳
良くコインの入れ物として説明されている有名アレ

479 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:46:46 ]
ああなんか色々間違ってるなゴメン

正しくは
push時
main復帰←0←復帰←1←復帰←2←復帰…8←復帰←9←復帰

pop時
main復帰→0→復帰→1→復帰→2→復帰…8→復帰→9→復帰



480 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:55:51 ]
スタック云々言って理解できるなら、
再帰ぐらいで悩まないと思う…。

481 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 00:16:15 ]
うぬ、そうか、、、スタック説明しないと無理か 大変だな
えーっとスタックはローカル変数を格納する為のメモリ領域で・・・
ってスレ違いだなこりゃ

スマン調べてくれとしか言いようが無い
頑張ってくれ

482 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 00:18:39 ]
同じ関数だから混乱する。
引数が関数名だと思ってたどってみ
test(1)は test1(1)だと



483 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 00:23:13 ]
年越し勉強会になっててワロタ

484 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 01:18:13 ]
printf("あけおめ");

485 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 01:18:53 ]
puts("ことよろ");

486 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 01:35:47 ]
scanf("%d", &otoshidama);

487 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 01:39:34 ]
^D

488 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 01:42:40 ]
!#include <stadio.h>
int mein()
{
fprint("間違えを見つけた数×100000円お都市玉をもらえます");
}
return 0;

あけましておめでとうございます

489 名前: 【4円】 mailto:sage [2008/01/01(火) 01:49:08 ]
600000GET

490 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 01:52:21 ]
600000円が最高金額か
ダンヒルの最高値福袋2個分かよw

491 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 06:18:41 ]
Max \700,0000- ?

492 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 06:19:18 ]
\700,000-



493 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 13:25:28 ]
\nが無いのを間違いと見るなら800000円かな?


494 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 13:42:07 ]
>>474
4番目のvoid *arglistを使って渡すべし。

495 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:06:42 ]
函数の()の中にvoidとかを書かないのは間違い?

496 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:11:54 ]
函数の()って何だよ。
もうちょっと人に伝わる言葉で表現しろよ。

497 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:13:29 ]
さーせん。
「mein()」の()の事

498 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:14:36 ]
mein って何だよ

499 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:15:15 ]
こっちのセリフです><

500 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:17:14 ]
main

501 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:17:39 ]
>>497
それだけじゃ、宣言か定義か呼び出しかすら分からないわけだが・

502 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:19:24 ]
いえ、>>488のことですが・・・



503 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:21:26 ]
別に何の間違いでもないだろ

504 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:22:46 ]
( ) 内に何も書かなかった場合

○ プロトタイプ宣言
 引数がどうなっているか不明であることを表す。
 その後具体的な引数を指定した宣言や定義が現れない限り、
 この関数を呼び出す時、実引数は可変長引数の時と同じように扱われる。

○ 関数定義
 規格上は void であると見なされることになっている。
 ただし、上記に書いた通りの動作を起こすコンパイラもある。

○ 関数呼び出し
 そもそも ( ) 内に void と書いて呼んではならない。

505 名前:440 [2008/01/01(火) 16:48:42 ]
また質問っす
#include <stdio.h>
#include <string.h>
int ko(char *p);
int main(void)
{
char str[80];

gets(str);
printf("%d\n",ko(str));
return 0;
}
int ko(char *p)
{
int a;
a=0;
while(*p){
a++;
p++;
}
return a;
}
なんですが
while(*p)なんですが
str[80]に入力した文字をどのように繰り返してるんでしょうか?
while(*p)だと全然理解ができません
入力した文字列の\0(ヌル文字まで繰り返すんでしょうか?)


506 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 16:57:16 ]
while(*p != '\0') { } と同じ。

507 名前:440 [2008/01/01(火) 17:00:23 ]
ありがとうございます
*pとかよくわかりずらくて参考書にそんなようなこと書いてなくて
次はforでやってみようかと思います

508 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 17:00:32 ]
>>505
・C言語では偽が0、真が0以外
・whileは条件が真(つまり0以外)の間、ループを続ける
・C言語の文字列(char配列)はヌルターミネートといって最後にヌル文字('\0')が入っている
・ヌル文字の文字コードは0
・*は間接参照演算子

つまり
>入力した文字列の\0(ヌル文字)まで繰り返す
で正しい。
ヌル文字ではなかったらaをインクリメントし、ついでにpを進める、ということを繰り返す
まあ(半角)文字数を調べる関数だね

509 名前:440 [2008/01/01(火) 17:06:50 ]
>>508
あ!だからヌル文字で終わるんですね
ヌル文字=0って事を・・・

文字列とかが入るとややこしくなるんで
これを使えば特定の文字の数を数える関数とかへっちゃらっすね

510 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 17:25:47 ]
でも、ちゃんと '\0' と比較した方が読みやすいから比較しようぜ

511 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 17:35:04 ]
そうだね。
こんな読みにくいコード書いても、読みやすいコードに比べて実行速度が速くなる訳じゃないもんね。


512 名前:440 [2008/01/01(火) 17:42:21 ]
実行速度ってどうなんすか?
僕が作るプログラムではそこまでイライラするほどかからないんすが



513 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 17:54:41 ]
全く変わらん。

514 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 19:16:56 ]
#include <stdio.h>
int main(void)
{
  while(1)
  {
    printf("おまいら\n");
    printf("あけましておめでとう!\n");
  }
  return 0;
}

515 名前:440 [2008/01/01(火) 19:18:16 ]
ネットワークプログラム作りたいんすよね
どんな過程でネットワーク系に入りますか?
まずC言語の文法など覚えてたらすぐネットワーク系のプログラムとかやりますかね?

516 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 19:27:54 ]
ネットワークプログラムは結構めんどくさい。文法覚えただけでは苦戦する。
でも、目的を持って難題に立ち向かうのが上達の秘訣だとおもう。
コードを書いていれば、何が必要かだんだんとわかってくる。
すぐに作れなくてもあきらめないことが重要だよ。


517 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 19:47:55 ]
#if
#else if
#end if

の使い方がわかりません!
どういうときに使うんですか!

518 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 19:51:35 ]
以下の★1と★2のやり方で結果が同じになるのはどうしてなんでしょうか?
有識者の方ご教授をお願いします。

#include<stdio.h>

void * func(void *p){

printf("□■□func開始□■□\n");
printf("pのアドレス = %p\n",p);
printf("p = %d\n",(int)p);
(int)p += 100;
printf("p = %d\n",(int)p);
printf("□■□func開始□■□\n");

return NULL;

}
int main(void){

int number = 30;

printf("numberのアドレス = %p\n",&number);
func((void *)number);★1

return 0;

}


519 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 19:52:05 ]
#include<stdio.h>

void * func(int *p){

printf("□■□func開始□■□\n");
printf("pのアドレス = %p\n",p);
printf("p = %d\n",*p);
*p += 100;
printf("p = %d\n",*p);
printf("□■□func開始□■□\n");

return NULL;

}
int main(void){

int number = 30;

printf("numberのアドレス = %p\n",&number);
func(&number);★2

return 0;

}


520 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 19:58:22 ]
>>517
#define VER 2
#if VER < 2
//古いコード
#else
//新しいコード
#endif

みたいにソースを丸ごと切り替えるときに使ったりする
慣れると便利。

521 名前:440 [2008/01/01(火) 19:59:01 ]
>>514
それは、おまいら あけましておめでとうを無限ループですね?
while(1)なので

522 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 19:59:45 ]
>>518
1はちゃんと動くのか?



523 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:03:15 ]
>>522
*(int*)p += 100;
とすると、同じ結果が出るね。

524 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:05:54 ]
>>517
デバッグ時にコードを一時的に無効化したり有効化するのに便利だね。
/* */とは違って、入れ子にできるから楽

#if 0
hoge();
hoge2();
#endif


525 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:07:40 ]
>>523
ほんとに
func((void *)number);★1
こうなのか?

526 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:11:00 ]
>>525
たしかに。&がないと通らないね。

527 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:12:32 ]
>>523
怒られるんだけどw

528 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:25:21 ]
>>520 >>524
ありがとうございます!
ということは int VER みたいなフラグを作っておいて使うんですね!

#if 0
とか参考にしてたソースに出てきてわからなかったです
ありがとうございました!

529 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:42:21 ]
>>528
>int VER みたいなフラグ
駄目です、それじゃ使えません

530 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:46:59 ]
>>523
*(int*)p
それは参照先がアレじゃないか?

531 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:52:07 ]
>>518
そのこぴぺされたコードで、コンパイルして実行できるか、もう一度確認してみてくれないか?
ちなみにWindows?もしかしてDOS?


532 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:53:06 ]
>>529
orz
使い方おしえてくだしあ



533 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:55:26 ]
>>532
>>520

ただの置換だと思えばいい

534 名前:440 [2008/01/01(火) 21:01:52 ]
viみたいなエディタ作るには
1人じゃ無理すかね?

535 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:03:12 ]
>>532
プリプロセッサと呼ばれる機能なのだ。
#defineはマクロで、文字列の置き換え
#define VAR 2
と書くと、今後ソースのVARは2という文字に置き換えられる。

#ifは条件付コンパイル。式が0でなければ有効となる。
#if VAR>1
と書くと、以下と同意になる。
#if 2>1
となって、式の結果は、1なので、有効となる。

536 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:03:21 ]
viみたいなエディタなら無理じゃない

537 名前:440 [2008/01/01(火) 21:05:24 ]
画面上に色とかつけたりしてるのは、あれはC言語でやってるんすかね?
viで色とかが使えるすがスキームなど色文字を表示することは可?

538 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:06:45 ]
>>537
DOSなら、エスケープシーケンスじゃないか?


539 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:14:13 ]
WindowsならコンソールAPI

540 名前:440 [2008/01/01(火) 21:15:29 ]
Linuxじゃ無理すか?
たしかにwindowsだと猫でもわかるC言語に書いてありましたが

541 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:18:55 ]
猫か…

542 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:21:45 ]
>>540
linux
エスケープシーケンス使えるよ
printf("\033[31mhogehoge\n");
って感じで



543 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:25:50 ]
VT100か

544 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:25:59 ]
>440
ちょっとは自分の頭を使って集中して物を考えたり調べも伸したりする習慣をつけろよ

545 名前:440 [2008/01/01(火) 21:47:36 ]
>>542
すげーっすね!
できましたよ
エスケープシーケンスで調べてきます

>>544
以後気をつけます

546 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 00:02:28 ]
>>523

左辺値にキャストはできないだろ?


547 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 09:04:56 ]
>>546
これを実行してみてほしい

#include<stdio.h>

int main(void){
long num=1234;

*((char*)&num)+=65536+256;
printf("%ld\n", num);
*((short*)&num)+=65536+256;
printf("%ld\n", num);

return 0;
}

548 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 09:59:34 ]
キャストしたものは左辺値じゃないけど、* をつけたから左辺値で通るんだよ。

549 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 22:28:47 ]
#include <stdio.h>
#include <malloc.h>
main(togo,toog)
int togo;
char *toog[];
{char *ogto, tgoo[80];FILE *ogot; int oogt=0, ootg, otog=79,
ottg=1;if ( togo== ottg) goto gogo; goto goog; ggot:
if ( fgets( tgoo, otog, ogot)) goto gtgo; goto gott;
gtot: exit(); ogtg: ++oogt; goto ogoo; togg: if ( ootg > 0)
goto oggt; goto ggot; ogog: if ( !ogot) goto gogo;
goto ggto; gtto: printf( "%d goto \'s\n", oogt); goto
gtot; oggt: if ( !memcmp( ogto, "goto", 4)) goto otgg;
goto gooo; gogo: exit( ottg); tggo: ootg= strlen(tgoo);
goto tgog; oogo: --ootg; goto togg; gooo: ++ogto; goto
oogo; gott: fclose( ogot); goto gtto; otgg: ogto= ogto +3;
goto ogtg; tgog: ootg-=4;goto togg; gtgo: ogto= tgoo;
goto tggo; ogoo: ootg-=3;goto gooo; goog: ogot= fopen(
toog[ ottg], "r"); goto ogog; ggto: ogto= tgoo; goto
ggot;}
これは何ですか?

550 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 23:13:44 ]
たしかIOCCCのプログラム。別に何ってわけじゃない。

551 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 00:00:33 ]
頭が物故割れた

552 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 00:24:50 ]
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
 char *position, line[80];
 FILE *fp;
 int counter=0, num, maxbuf=79;
 if ( argc == 1) {return 1;}
 fp= fopen(argv[ 1], "r");
 if ( !fp) {return 1;}
 position= line;
 while ( fgets( line, maxbuf, fp)) {
  position= line;
  num= strlen(line);
  num-=4;
  while (( num > 0) && ( !memcmp( position, "goto", 4))) {
   position= position +3;
   ++counter;
   num-=3;
   ++position;
   --num;
  }
 }
 fclose( fp);
 printf( "%d goto \'s\n", counter);
 return 0;
}

たぶんこういうこと



553 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 00:40:09 ]
まちがえた、・・・まぁいいか・・・

554 名前:デフォルトの名無しさん [2008/01/05(土) 01:12:12 ]
Javaを半年ほどやってCを最近始めた素人です。

同じソースファイル内でも関数の定義位置が違うだけで、
コンパイラが、関数宣言ないよー。という警告をするのが、
いまいち慣れないのですが。

static宣言な、ファイル内スコープの関数なんかでも、
プロトタイプ宣言ってきちんとしたほうが良いのでしょうか。

手元にあるC言語入門だと、main関数を最後のほうに、
定型的な計算用の関数等を、頭のほうにもってきて、
プロトタイプ宣言を書かないようしているのですが、
皆様はどういった書き方をしておられるのでしょうか・・・。

555 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 01:14:41 ]
>>554
基本的に、ソースファイルの書き方は一貫性が大事だと思っている。
だから、一貫性を持って読みやすければそれでOKだ。

556 名前:デフォルトの名無しさん [2008/01/05(土) 01:29:27 ]
>>554
おぃ… どのportでaccessしろと云うのだ?

557 名前:デフォルトの名無しさん [2008/01/05(土) 01:51:07 ]
www.microsoft.com/japan/msdn/vs/vcsharp/mth_lexicograp.aspx
から.msiインスコしたまではいいですが、ここからどうすればアプリとして起動できますか?
よく分からないままMS Visual C#2008入れました。
最終的にやりたいのは、nCrで任意のnとrを最初に指定して、.txtファイルで1行毎に記述した多数の序数x(1≦x≦nCr)を組み合わせ化して別の.txtファイルにsaveすることです。

558 名前:デフォルトの名無しさん [2008/01/05(土) 02:09:33 ]
方向音痴な初心者です
因みに… '/usr/share/doc/man1/或.zg
個人の計算では恐らく'/usr/share/doc*
全てを読み込む様に為っていた筈…

559 名前:デフォルトの名無しさん [2008/01/05(土) 02:20:37 ]
最後の状態…
1・再起動がBIOSに到達せず再起動…
2・停止がBIOSに到達せず停止の筈が再起動…
3・RANを切らないと停止せず…

560 名前:デフォルトの名無しさん [2008/01/05(土) 02:25:06 ]
斯様に考えてもfile内に.pngを埋め込むのは無理と考えerror_fileを削除の末…
此の顛末…

561 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 02:31:08 ]
次の質問をどうぞ

562 名前:557 [2008/01/05(土) 02:42:49 ]
see me(>>557) plz!



563 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 02:55:06 ]
>>557>>562
ここはC#のスレではありませんよ

564 名前:557 [2008/01/05(土) 03:49:11 ]
>>563
Spcially sorry, sir.

565 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 07:32:27 ]
>>554
> 手元にあるC言語入門だと、main関数を最後のほうに、
> 定型的な計算用の関数等を、頭のほうにもってきて、
> プロトタイプ宣言を書かないようしているのですが、
> 皆様はどういった書き方をしておられるのでしょうか・・・。

基本的に読むときのことを考えて書く。
文章は上から下へ向かって読む。
だからプロトタイプ宣言も書いてmainの下に呼び出す関数を書く。

よく見るif (0 == a) みたいなやり方(=を書き間違えるミスを防ぐやつね)
もバッドノウハウだと思う。

566 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 09:07:16 ]
>>565
最後の2行は同意するが、関数をボトムアップで書くのは臨機応変でありだと思う。

567 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 10:07:08 ]
>>565

> よく見るif (0 == a) みたいなやり方(=を書き間違えるミスを防ぐやつね)
> もバッドノウハウだと思う。

なんで?
他にいい方法ある?

568 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 10:07:35 ]
はい、次の質問どうぞ〜

569 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 10:14:55 ]
>>565
>基本的に読むときのことを考えて書く。
>文章は上から下へ向かって読む。
>だからプロトタイプ宣言も書いてmainの下に呼び出す関数を書く。
うーん・・・微妙。
結局main関数がファイルの一番上に来るわけでもないし、
mainを最初に持ってきたからって可読性は上がらないと思う。
コード全体で一貫性があればケースバイケースどころか
趣味の範疇じゃない?

570 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 10:18:41 ]
>>567

最近のコンパイラなら警告を出すはずだし、lintもある。
それに、
 if (a = b)
は防げない。

-Wall で出る警告をすべて潰すか、lintを使う習慣をつけたほうが良い。


571 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 10:19:25 ]
Cに慣れると関数がボトムアップに並んでないと不自然に見えてくる。

572 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 10:32:24 ]
>>555で終わってるネタ



573 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 10:32:49 ]
>>569

おれは >>565に同意。
main関数を一番下に持ってくるのは、プロトタイプ宣言がなかった頃の
古い習慣を引きずってるだけだったはず。

>結局main関数がファイルの一番上に来るわけでもないし、

これはその通りだけど、プロトタイプ宣言を長々と書くことは少ないし、
たとえ長くなっても関数ブロックがどこから始まるかはすぐわかるので、
main関数が上にあるはうが見つけやすい。

あと、呼び出す関数の引数などを見たいとき、
プロトタイプ宣言が一箇所にまとまっているほうが見やすいと思う。

まあ、これはコーディングスタイルだから、強くは主張しないけど。


574 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 11:27:15 ]
>>573
プロトタイプ宣言のなかった頃という実例を提示してくれ。
宣言がなかったら外部の関数は一切まともに呼べないと思うのだが。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<237KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef