プロトタイプ宣言の必須化

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
みけCAT

プロトタイプ宣言の必須化

#1

投稿記事 by みけCAT » 15年前

おはようございます。みけCATです。
開発環境はDev-c++4.9.9.2(コンパイラはデフォルト)
もしくはTeraPad0.93とMinGWと自作ソフトを使っています。
たとえばこのコードを見てください。
#include <stdio.h>

int main(void) {
    printf("%d\n",zikkenn(3,5));/*スペルミス*/
    return 0;
}

int zikken(int a,int b) {
    return a+b;
}
このコードをコンパイルすると、
[Linker erro[/url] undefined reference to `zikkenn'
というエラーが出ます。
この程度のプログラムであれば、zikkennというトークンがどこに使われているかわかりやすいですが、
もっと大きいプログラムになるとわかりにくくなります。
検索すればいいかもしれないですが、
#include <stdio.h>

int main(void) {
    printf("%d\n",ikken(3,5));/*スペルミス*/
    return 0;
}

int zikken(int a,int b) {
    return a+b;
}
のようなパターンになると、ikkenで検索するとzikkenも引っかかってきて、検索しにくいと思います。
そこで、関数のプロトタイプ宣言を必須にして、プロトタイプ宣言がない関数を使用すると
そこで警告かエラーを吐くようにするコマンドラインオプションはありますでしょうか?
教えていただければ幸いです。

たかぎ

Re:プロトタイプ宣言の必須化

#2

投稿記事 by たかぎ » 15年前

一番手っ取り早いのはC++でコンパイルすることです。

へろりくしょん

Re:プロトタイプ宣言の必須化

#3

投稿記事 by へろりくしょん » 15年前

grepあたりで検索するという手もありますね。

たかぎ

Re:プロトタイプ宣言の必須化

#4

投稿記事 by たかぎ » 15年前

一応GCCのオプションについても回答しておきます。

-Wimplicit-function-declaration
-Werror-implicit-function-declaration

この二つがそれに該当するはずです。

みけCAT

Re:プロトタイプ宣言の必須化

#5

投稿記事 by みけCAT » 15年前

たかぎさん
ありがとうございます。
#include <stdio.h>

int main(void) {
    printf("%d\n",zikken(3,5));/*スペルミス*/
    return 0;
}

int zikkenn(int a,int b) {
    return a+b;
}
を-Wimplicit-function-declarationオプションでコンパイルすると

F:\C\error\error2.c: In function `main':
F:\C\error\error2.c:4: warning: implicit declaration of function `zikken'

C:\Users\(ユーザー名)\AppData\Local\Temp/ccWAbaaa.o(.text+0x3a):error2.c: undefined reference to `zikken'
collect2: ld returned 1 exit status

と表示されました。

エディタで検索するときに「単語全部が一致」を使うという手もあります。

閉鎖

“C言語何でも質問掲示板” へ戻る