Last Update 2021/09/06
-Wimplicit-function-declaration
宣言される前の関数が使用された場合に警告を出力
テスト概要
-Wimplicit-function-declarationオプション無し・有り、または、-Wallオプションの場合の警告出力例
C90、C99、C11、C17の各言語標準を指定した場合の警告出力例
言語標準にC90を指定し、-Wall、-Wimplicit-function-declarationの各オプションを併記した場合の警告出力例
実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
GNU C Library 2.28
GNU Binutils 2.31.1
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
使用ファイル
sample.c
#include <stdio.h>
int sampFunc2(void)
{
/* 宣言される前の関数を使用 */
return func1();
}
int func1(void)
{
printf("func1\n");
return 1;
}
int main(void)
{
sampFunc2();
return 0;
}
-Wimplicit-function-declarationオプション無し・有り、または、-Wallオプションの場合の警告出力例
-Wimplicit-function-declarationオプションを指定して実行
$ gcc -Wimplicit-function-declaration sample.c
sample.c: In function ‘sampFunc2’:
sample.c:6:9: warning: implicit declaration of function ‘func1’ [-Wimplicit-function-declaration]
return func1();
^~~~~
$ -Wimplicit-function-declaratioオプションの対象となる警告を出力
オプション無しで実行
$ gcc sample.c
sample.c: In function ‘sampFunc2’:
sample.c:6:9: warning: implicit declaration of function ‘func1’ [-Wimplicit-function-declaration]
return func1();
^~~~~
$ オプション無しの場合でも対象となる警告を出力
-Wallオプションを指定して実行
$ gcc -Wall sample.c
sample.c: In function ‘sampFunc2’:
sample.c:6:9: warning: implicit declaration of function ‘func1’ [-Wimplicit-function-declaration]
return func1();
^~~~~
$ -Wallに含まれるため、対象となる警告を出力
C90、C99、C11、C17の各言語標準を指定した場合の警告出力例
言語標準としてC90を指定した場合
$ gcc -std=c90 sample.c
$ C90の場合、デフォルトでは-Wimplicit-function-declarationオプションは無効
言語標準としてC99、C11、C17を指定した場合
$ gcc -std=c99 sample.c
sample.c: In function ‘sampFunc2’:
sample.c:6:9: warning: implicit declaration of function ‘func1’ [-Wimplicit-function-declaration]
return func1();
^~~~~
$ gcc -std=c11 sample.c
sample.c: In function ‘sampFunc2’:
sample.c:6:9: warning: implicit declaration of function ‘func1’ [-Wimplicit-function-declaration]
return func1();
^~~~~
$ gcc -std=c17 sample.c
sample.c: In function ‘sampFunc2’:
sample.c:6:9: warning: implicit declaration of function ‘func1’ [-Wimplicit-function-declaration]
return func1();
^~~~~
$ C99、C11、C17の場合、デフォルトでは-Wimplicit-function-declarationオプションは有効
言語標準指定なしの場合の挙動詳細
$ gcc -v sample.c
Using built-in specs.
︙
GNU C17 (GCC) version 8.2.0 (x86_64-pc-linux-gnu)
compiled by GNU C version 8.2.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version none
︙
sample.c: In function ‘sampFunc2’:
sample.c:6:9: warning: implicit declaration of function ‘func1’ [-Wimplicit-function-declaration]
return func1();
^~~~~
︙
$ 言語標準指定なしの場合は、C17でコンパイル
デフォルトでは-Wimplicit-function-declarationオプションが有効
言語標準にC90を指定し、-Wall、-Wimplicit-function-declarationの各オプションを併記した場合の警告出力例
-std=c90と-Wallを併記した場合
$ gcc -std=c90 -Wall sample.c
sample.c: In function ‘sampFunc2’:
sample.c:6:9: warning: implicit declaration of function ‘func1’ [-Wimplicit-function-declaration]
return func1();
^~~~~
$ -Wallに含まれる-Wimplicit-function-declarationオプションが有効化
-std=c90と-Wimplicit-function-declarationを併記した場合
$ gcc -std=c90 -Wimplicit-function-declaration sample.c
sample.c: In function ‘sampFunc2’:
sample.c:6:9: warning: implicit declaration of function ‘func1’ [-Wimplicit-function-declaration]
return func1();
^~~~~
$ -Wimplicit-function-declarationオプションが有効化