Last Update 2021/10/17
-Wc90-c99-compat
ISO C99には有るがISO C90には無い機能に関して警告を出力
テスト概要
オプション無し、および-Wc90-c99-compatオプションを使用した際の警告出力例
実行環境
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 main(void)
{
int i, j;
int *pn = (int []){1, 2, 3}; /* 複合リテラル */
for (i=0; i<3; i++)
{
int a[*pn + i]; /* 可変長配列 */
for (j=0; j<(*pn + i); j++)
{
a[j] = j * 2;
printf("i = %d : a[%d] = %d\n", i, j, a[j]);
}
puts("");
}
return 0;
}
動作テスト
オプション無しでコンパイルを実行
$ gcc sample.c 警告無し
$
-Wc90-c99-compatオプション使用してコンパイルを実行
$ gcc -Wc90-c99-compat sample.c
sample.c: In function ‘main’:
sample.c:7:20: warning: ISO C90 forbids compound literals [-Wc90-c99-compat]
int *pn = (int []){1, 2, 3}; /* 複合リテラル */
^
sample.c:11:3: warning: ISO C90 forbids variable length array ‘a’ [-Wc90-c99-compat]
int a[*pn + i]; /* 可変長配列 */
^~~
$ ISO C90では禁止されている複合リテラルと可変長配列への警告