Last Update 2021/10/30
-Wsizeof-array-argument
関数定義で配列として宣言された引数にsizeof演算子が使用された場合に警告を出力
テスト概要
オプション無し、-Wsizeof-array-argumentオプションを使用した際の警告出力例
実行環境
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>
#include <string.h>
void sampFunc(char a[])
{
/* 配列として宣言されている引数にsizeof演算子を使用 */
printf("%ld\n", sizeof(a));
}
int main(void)
{
char a[20] = "test";
sampFunc(a);
return 0;
}
動作テスト
オプション無しでコンパイルを実行
$ gcc sample.c
sample.c: In function ‘sampFunc’:
sample.c:7:24: warning: ‘sizeof’ on array function parameter ‘a’ will return size of ‘char *’ [-Wsizeof-array-argument]
printf("%ld\n", sizeof(a)); 「a」のsizeof式はポインタのサイズを返す事への警告
^
sample.c:4:20: note: declared here
void sampFunc(char a[])
~~~~~^~~
$ ./a.out
8
$
-Wsizeof-array-argumentオプション使用してコンパイルを実行
$ gcc -Wsizeof-array-argument sample.c
sample.c: In function ‘sampFunc’:
sample.c:7:24: warning: ‘sizeof’ on array function parameter ‘a’ will return size of ‘char *’ [-Wsizeof-array-argument]
printf("%ld\n", sizeof(a));
^
sample.c:4:20: note: declared here
void sampFunc(char a[])
~~~~~^~~
$ -Wsizeof-array-argumentオプションはデフォルトで有効であるためオプション無しと同じ結果となる