C言語関係掲示板

過去ログ

No680 エラー・警告・リンクエラーの違い

[戻る] [ホームページ]
No.7751

エラーメッセージについて
投稿者---・・・(2003/06/25 09:14:08)


C言語でのエラー・警告・リンクエラーの違いについて教えてください。

No.7754

Re:エラーメッセージについて
投稿者---YuO(2003/06/25 09:56:43)


>C言語でのエラー・警告・リンクエラーの違いについて教えてください。

・エラー
C言語の構文規則・意味規則又は制約に反したり,
それら自体には反しないが,コンパイル処理を続けられないときに発生します。

例)
signed unsigned int foo; /* 許されない組合せ:宣言における制約違反 */
{ foo: } /* ラベルの後に文が続かない:構文規則違反 */
int n = 0; { int array[n]; } /* VLAのサイズが0:意味規則違反(C99 only) */


・警告
エラーのような明白な間違いではないが,結果が未定義・不定とされている時や,
よくある間違いをコンパイラが見つけたときに発生します。

例)
goto label; { int foo[10] = { 0 }; label: ; } /* fooは初期化子があるが,labelに飛んできた場合は初期化されない */
int i; func(&i); char ch = i; /* iはchに変換できないかもしれない */
if (i = 0) { /* i == 0の間違いの可能性がある */


・リンクエラー
中間ファイルから実行可能形式ファイルを生成するときに,同一のシンボルが複数の中間ファイルで見つかったり,
逆に必要なシンボルが見つからなかった場合などに発生します。
上の二つはコンパイラが吐くのに対して,これはリンカが吐きます。
#リンカの警告,というのもあります。


No.7755

Re:エラーメッセージについて
投稿者---たいちう(2003/06/25 09:59:04)


他のコンパイラは知らないのでVCを使ってて思うこと。
厳密な定義もあるのでしょうが、とりあえず私の認識。

エラー:
  文法的に誤っているためコンパイルできないこと。
警告:
  文法的な誤りではないのでコンパイルできるけど、
  プログラマが意図した動きと違うのでは?と、
  コンパイラが心配してくれること。
  警告レベルを上げ過ぎると大きなお世話のこともあるけど、
  大抵は自分のミスだったりする。
  無視はしないように。無理なキャスト等で解決しないように。
リンクエラー:
  個々のソースファイルには問題ないけど、リンクさせようとすると、
  辻褄があってなかったということ。