Last Update 2021/11/14
-Wvla
コード内で可変長配列を使用されている場合に警告を出力
-std=c90と併用して-Wpedanticオプションを使用した際は、-Wno-vlaオプション追加で-Wvlaの警告を抑制
-std=c90と併用して-Wpedanticオプションを使用した際は、-Wno-vlaオプション追加で-Wvlaの警告を抑制
テスト概要
オプション無し、および-Wvlaオプションを使用したコンパイル時の警告出力例
-std=c90オプション使用した際に、オプション無し、-Wpedanticオプションの使用時、
および-Wpedanticに-Wno-vlaオプションを追加した際の各々の警告出力例
実行環境
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>
void sampFunc(int n)
{
int i;
/* 可変長配列を宣言 */
char c[n];
for (i=0; i<n; i++)
{
c[i] = i * 2;
}
for (i=0; i<n; i++)
{
printf("%d ", c[i]);
}
printf("\n");
}
int main(void)
{
sampFunc(5);
return 0;
}
-Wvlaオプションを使用したコンパイル時の警告出力例
オプション無しで実行
$ gcc sample.c エラー・警告無し
$
-Wvlaオプションを指定して実行
$ gcc -Wvla sample.c
sample.c: In function ‘sampFunc’:
sample.c:6:2: warning: ISO C90 forbids variable length array ‘c’ [-Wvla]
char c[n];
^~~~
$ ISO C90が可変長配列を禁止している事についての警告
-std=c90オプション使用した際に、オプション無し、-Wpedanticオプションの使用時、
および-Wpedanticに-Wno-vlaオプションを追加した際の各々の警告出力例
-std=c90オプションのみを指定して実行
$ gcc -std=c90 sample.c エラー・警告無し
$
-std=c90と-Wpedanticオプションを同時に指定して実行
$ gcc -std=c90 -Wpedantic sample.c
sample.c: In function ‘sampFunc’:
sample.c:8:2: warning: ISO C90 forbids variable length array ‘c’ [-Wvla]
char c[n];
^~~~
$ -std=c90指定時は-Wpedanticに-Wvlaが含まれる
-std=c90と-Wpedanticオプションに-Wno-vlaオプションを追加指定して実行
$ gcc -std=c90 -Wpedantic -Wno-vla sample.c エラー・警告無し
$ -Wno-vlaオプションにより-Wvlaによる警告を抑制