Last Update 2021/09/12
-Wparentheses
真理値が期待される箇所での代入や、特定の式で括弧が省略されている場合に警告を出力
テスト概要
オプション無し、-Wparentheses、-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>
int main(void)
{
int i, j, k;
for (i=0; i<3; i++)
{
if (j=i-1)
{
k = j - 1;
printf("%d : %d\n", j, k);
}
if (i<j<k)
{
return 1;
}
if ((i<j)<k)
{
return 1;
}
}
return 0;
}
オプション無しでコンパイルを実行
$ gcc sample.c 警告無し
$ ./a.out
-1 : -2
1 : 0
$
-Wparenthesesオプション使用してコンパイルを実行
$ gcc -Wparentheses sample.c
sample.c: In function ‘main’:
sample.c:9:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
if (j=i-1)
^
sample.c:14:8: warning: comparisons like ‘X<=Y<=Z’ do not have their mathematical meaning [-Wparentheses]
if (i<j<k)
~^~
$ 括弧で囲むべき部分の提案や対象となる式の評価などを内容とする警告を出力
-Wallオプション使用してコンパイルを実行
$ gcc -Wall sample.c
sample.c: In function ‘main’:
sample.c:9:7: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
if (j=i-1)
^
sample.c:14:8: warning: comparisons like ‘X<=Y<=Z’ do not have their mathematical meaning [-Wparentheses]
if (i<j<k)
~^~
$ -Wallに-Wparenthesesが含まれるため同一の出力結果