Last Update 2021/01/18
-funsigned-bitfields(-fno-signed-bitfields)オプション
ビットフィールドを符号無しの型とする(宣言がsignedまたはunsignedのどちらも使用しない場合)
テスト概要
-funsigned-bitfieldsオプションを使用せずにコンパイルを実行
-funsigned-bitfieldsオプションを使用してコンパイルを実行
-fno-signed-bitfieldsオプションを使用してコンパイルを実行
実行環境
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
/* -funsigned-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;
}
-funsigned-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/ccMbE6uq.o /tmp/ccYdHKs2.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
$
-funsigned-bitfieldsオプションを使用してコンパイルを実行
コンパイル実行
$ gcc -v -Wall -funsigned-bitfields main.c <--- -funsigned-bitfieldsオプションを使用してコンパイル
Using built-in specs.
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v main.c ... -funsigned-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/ccW1UW6L.o /tmp/ccWO8Q9X.s
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 ...
COLLECT_GCC_OPTIONS='-v' '-Wall' '-funsigned-bitfields' '-mtune=generic' '-march=x86-64'
$ ./a.out
int n0 = -1
int (bit-field) n1 = 63 <--- オプション使用の場合は、指定の無いビットフィールドは符号無し
unsigned int (bit-field) n2 = 63
signed int (bit-field) n3 = -1
$
-fno-signed-bitfieldsオプションを使用してコンパイルを実行
コンパイル実行
$ gcc -v -Wall -fno-signed-bitfields main.c <--- -fno-signed-bitfieldsオプションを使用してコンパイル
Using built-in specs.
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/cc1 -quiet -v main.c ... -fno-signed-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/ccKxmU0r.o /tmp/ccUNeEXH.s
︙
/usr/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/collect2 ...
COLLECT_GCC_OPTIONS='-v' '-Wall' '-fno-signed-bitfields' '-mtune=generic' '-march=x86-64'
$ ./a.out
int n0 = -1
int (bit-field) n1 = 63 <--- 符号付きに対する否定オプション = 符号無し
unsigned int (bit-field) n2 = 63
signed int (bit-field) n3 = -1
$