Last Update 2021/01/16
-fsigned-charオプション
char型をsigned charと同様に符号付きの型とする
テスト概要
-fsigned-charオプションを使用せずにコンパイルを実行
-fsigned-charオプションを使用してコンパイルを実行
実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
GNU C Library 2.28
GNU Binutils 2.31.1
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
使用ファイル
各例共通
main.c
/* -fsigned-char オプション動作確認用ソースファイル */
#include <stdio.h>
int main(void)
{
char c1, c2;
unsigned char c3, c4;
signed char c5, c6;
c1 = 1;
c2 = -2;
c3 = 1;
c4 = -2;
c5 = 1;
c6 = -2;
printf("char c1 = %d : c2 = %d\n", c1, c2);
printf("unsigned char c3 = %d : c4 = %d\n", c3, c4);
printf("signed char c5 = %d : c6 = %d\n", c5, c6);
return 0;
}
-fsigned-charオプションを使用せずに実行
コンパイル実行
$ gcc -v -Wall main.c
Using built-in specs.
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v main.c ...
︙
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
︙
as -v --64 -o /tmp/cc42g5At.o /tmp/cckVSFjv.s
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 ...
COLLECT_GCC_OPTIONS='-v' '-Wall' '-mtune=generic' '-march=x86-64'
$ ./a.out
char c1 = 1 : c2 = -2 <--- オプション無しの場合は環境依存(この例のデフォルトは符号有り)
unsigned char c3 = 1 : c4 = 254
signed char c5 = 1 : c6 = -2
$
-fsigned-charオプションを使用して実行
コンパイル実行
$ gcc -v -Wall -fsigned-char main.c <--- -fsigned-charオプションを使用してコンパイル
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v main.c ... -fsigned-char ...
︙
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
︙
as -v --64 -o /tmp/ccZpaimq.o /tmp/cc8OeBQp.s
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 ...
COLLECT_GCC_OPTIONS='-v' '-Wall' '-fsigned-char' '-mtune=generic' '-march=x86-64'
$ ./a.out
char c1 = 1 : c2 = -2 <--- オプション使用の場合は、char型は符号付き(signed char)
unsigned char c3 = 1 : c4 = 254
signed char c5 = 1 : c6 = -2
$