Loose-Info.com
Last Update 2021/01/17
TOP - 各種テスト - gcc - -fsigned-bitfieldsオプション

-fsigned-bitfields(-fno-unsigned-bitfields)オプション
ビットフィールドを符号付きの型とする(宣言がsignedまたはunsignedのどちらも使用しない場合)

テスト概要

その1
-fsigned-bitfieldsオプションを使用せずにコンパイルを実行

その2
-fsigned-bitfieldsオプションを使用してコンパイルを実行

その3
-fno-unsigned-bitfieldsオプションを使用してコンパイルを実行

実行環境

GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1


コード例・出力内容中の表記

・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。

使用ファイル

各例共通

main.c
/* -fsigned-bitfields オプション動作確認用ソースファイル */ #include <stdio.h> struct TestBF { int n1 : 6; unsigned int n2 : 6; signed int n3 : 6; }; int main(void) { int n0; struct TestBF s0; n0 = -1; s0.n1 = -1; s0.n2 = -1; s0.n3 = -1; printf("int n0 = %d\n", n0); printf("int (bit-field) n1 = %d\n", s0.n1); printf("unsigned int (bit-field) n2 = %d\n", s0.n2); printf("signed int (bit-field) n3 = %d\n", s0.n3); return 0; }

その1

-fsigned-bitfieldsオプションを使用せずに実行

コンパイル実行
$ 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/ccVtL3Gb.o /tmp/cc7ylUpD.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 int n0 = -1 int (bit-field) n1 = -1 <--- オプション無しの場合は環境依存(この例のデフォルトは符号有り) unsigned int (bit-field) n2 = 63 signed int (bit-field) n3 = -1 $

その2

-fsigned-bitfieldsオプションを使用してコンパイルを実行

コンパイル実行
$ gcc -v -Wall -fsigned-bitfields main.c <--- -fsigned-bitfieldsオプションを使用してコンパイル /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v main.c ... -fsigned-bitfields ... 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/cclmHMeN.o /tmp/ccWYbxpk.s /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 ... COLLECT_GCC_OPTIONS='-v' '-Wall' '-fsigned-bitfields' '-mtune=generic' '-march=x86-64' $ ./a.out int n0 = -1 int (bit-field) n1 = -1 <--- オプション使用の場合は、指定の無いビットフィールドは符号付き unsigned int (bit-field) n2 = 63 signed int (bit-field) n3 = -1 $

その3

-fno-unsigned-bitfieldsオプションを使用してコンパイルを実行

コンパイル実行
$ gcc -v -Wall -fno-unsigned-bitfields main.c <--- -fno-unsigned-bitfieldsオプションを使用してコンパイル /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v main.c ... -fno-unsigned-bitfields ... 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/cc12qRdR.o /tmp/ccQ9kJSD.s /usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 ... COLLECT_GCC_OPTIONS='-v' '-Wall' '-fno-unsigned-bitfields' '-mtune=generic' '-march=x86-64' $ ./a.out int n0 = -1 int (bit-field) n1 = -1 <--- 符号無しに対する否定オプション = 符号付き unsigned int (bit-field) n2 = 63 signed int (bit-field) n3 = -1 $