Last Update 2021/10/23
-Wsign-conversion
符号付き整数の符号なしへの代入で、符号の変更が生じる可能性のある暗黙の変換が生じる場合に警告
テスト概要
オプション無し、-Wsign-conversion、-Wconversionの各オプションを使用した際の警告出力例
実行環境
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 n0 = -1;
unsigned int n1 = 1;
printf("n0 = %u : n1 = %u\n", n0, n1);
/* 符号付きから符号なし整数型への代入 */
n1 = n0;
printf("%u\n", n1);
/* 符号付きから符号なし整数型への代入(型キャスト有) */
n1 = (unsigned int)n0;
printf("%u\n", n1);
return 0;
}
動作テスト
オプション無しでコンパイルを実行
$ gcc sample.c 警告無し
$
-Wsign-conversionオプションを指定してコンパイルを実行
$ gcc -Wsign-conversion sample.c
sample.c: In function ‘main’:
sample.c:11:7: warning: conversion to ‘unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion]
n1 = n0;
^~
$ intからunsigned intへの変換で符号変化の可能性についての警告
-Wconversionオプションを指定してコンパイルを実行
$ gcc -Wconversion sample.c
sample.c: In function ‘main’:
sample.c:11:7: warning: conversion to ‘unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion]
n1 = n0;
^~
$ -Wsign-conversionオプションは-Wconversionでも有効となる