Last Update 2021/09/15
-Wshift-negative-value
負の値を左シフトした場合に警告を出力
テスト概要
オプション無し、-Wshift-negative-value、-Wextraの各オプションを使用した際の警告出力例
-Wextraオプションと言語標準C90、C99指定時の警告出力例
実行環境
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)
{
/* 負の値を左シフト */
printf("%d\n", -8 << 1);
return 0;
}
オプション無し、-Wshift-negative-value、-Wextraの各オプションを使用した際の警告出力例
オプション無しで実行
$ gcc sample.c エラー・警告無し
$ ./a.out
-16
$
-Wshift-negative-valueオプションを指定して実行
$ gcc -Wshift-negative-value sample.c
sample.c: In function ‘main’:
sample.c:6:20: warning: left shift of negative value [-Wshift-negative-value]
printf("%d\n", -8 << 1);
^~
$
-Wextraオプションを指定して実行
$ gcc -Wextra sample.c
sample.c: In function ‘main’:
sample.c:6:20: warning: left shift of negative value [-Wshift-negative-value]
printf("%d\n", -8 << 1);
^~
$
-Wextraオプションと言語標準C90、C99指定時の警告出力例
-Wextraオプションと言語標準C90を指定して実行
$ gcc -std=c90 -Wextra sample.c エラー・警告無し
$
-Wextraオプションと言語標準C99を指定して実行
$ gcc -std=c99 -Wextra sample.c
sample.c: In function ‘main’:
sample.c:6:20: warning: left shift of negative value [-Wshift-negative-value]
printf("%d\n", -8 << 1);
^~
$ 言語標準C99以降はデフォルトで-Wshift-negative-valueオプションが有効
言語標準指定無し、および-Wextraオプションを指定した場合の出力詳細
$ gcc -Wextra -v sample.c
Using built-in specs.
︙
GNU C17 (GCC) version 8.2.0 (x86_64-pc-linux-gnu)
compiled by GNU C version 8.2.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version none
︙
sample.c: In function ‘main’:
sample.c:6:20: warning: left shift of negative value [-Wshift-negative-value]
printf("%d\n", -8 << 1);
^~
︙
$ 言語標準指定無しの場合は言語標準C17となり、-Wshift-negative-valueオプションが有効