Last Update 2021/09/11
-Wmissing-braces
配列の初期化などでブレースによって完全に囲まれていない箇所がある場合に警告を出力
テスト概要
オプション無し、-Wmissing-braces、-Wallの各オプションを使用した際の警告出力例
実行環境
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>
struct stA
{
int n;
int a[2];
};
int main(void)
{
/* n1 : 完全な形でブレースで括られた配列の初期化ステートメント */
int n1[3][3] = {{0, 1, 2},
{3, 4, 5},
{6, 7, 8}};
/* n2, n3 : ブレースで完全に括られていない配列の初期化 */
int n2[3][3] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
int n3[3][3] = {0, 1, 2,
{3, 4, 5},
6, 7, 8};
/* s1 : 完全な形でブレースで括られた構造体の初期化ステートメント */
struct stA s1 = {1, {2, 3}};
/* s1 : ブレースで完全に括られていない構造体の初期化ステートメント */
struct stA s2 = {1, 2, 3};
printf("%d --- %d --- %d --- %d --- %d\n",
n1[0][0], n2[1][1], n3[2][2], s1.a[0], s2.a[1]);
return 0;
}
動作テスト
オプション無しでコンパイルを実行
$ gcc sample.c 警告無し
$
-Wmissing-bracesオプション使用してコンパイルを実行
$ gcc -Wmissing-braces sample.c
sample.c: In function ‘main’:
sample.c:17:17: warning: missing braces around initializer [-Wmissing-braces]
int n2[3][3] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
^
{ } { } { }
sample.c:18:17: warning: missing braces around initializer [-Wmissing-braces]
int n3[3][3] = {0, 1, 2,
^
{ }
sample.c:18:17: warning: missing braces around initializer [-Wmissing-braces]
int n3[3][3] = {0, 1, 2,
^
{ }
sample.c:20:18:
6, 7, 8};
{ }
sample.c:26:18: warning: missing braces around initializer [-Wmissing-braces]
struct stA s2 = {1, 2, 3};
^
{ }
$ ブレースによる囲みの不足部分と、推奨追加位置からなる警告を出力
-Wallオプション使用してコンパイルを実行
$ gcc -Wall sample.c
sample.c: In function ‘main’:
sample.c:17:17: warning: missing braces around initializer [-Wmissing-braces]
int n2[3][3] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
^
{ } { } { }
sample.c:18:17: warning: missing braces around initializer [-Wmissing-braces]
int n3[3][3] = {0, 1, 2,
^
{ }
sample.c:18:17: warning: missing braces around initializer [-Wmissing-braces]
int n3[3][3] = {0, 1, 2,
^
{ }
sample.c:20:18:
6, 7, 8};
{ }
sample.c:26:18: warning: missing braces around initializer [-Wmissing-braces]
struct stA s2 = {1, 2, 3};
^
{ }
$ -Wallに-Wmissing-bracesが含まれるため関連する警告を出力