Last Update 2021/09/13
-Wsequence-point
CおよびC++標準のシーケンスポイント規則に違反しているため、動作結果が未定義となる可能性があるコードに関する警告
テスト概要
オプション無し、-Wsequence-point、-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 n = 0;
printf("%d\n", (n++ - n++));
return 0;
}
動作テスト
オプション無しでコンパイルを実行
$ gcc sample.c 警告無し
$
-Wsequence-pointオプション使用してコンパイルを実行
$ gcc -Wsequence-point sample.c
sample.c: In function ‘main’:
sample.c:7:19: warning: operation on ‘n’ may be undefined [-Wsequence-point]
printf("%d\n", (n++ - n++));
~^~
$ 「n」の演算が未定義となる事に関する警告
-Wallオプション使用してコンパイルを実行
$ gcc -Wall sample.c
sample.c: In function ‘main’:
sample.c:7:19: warning: operation on ‘n’ may be undefined [-Wsequence-point]
printf("%d\n", (n++ - n++));
~^~
$ -Wallに-Wsequence-pointが含まれるため同一の出力結果