C言語 †
ビットフィールド †
構造体や共用体のメンバを、ビット単位で宣言、使用できる
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
-
|
|
|
|
!
-
|
|
|
|
!
|
#include <stdio.h>
struct _xyz{
unsigned char x : 1; unsigned char y : 3; unsigned char z : 2; char c; };
int main(void)
{
struct _xyz xyz = { 1, 5, 0, 'a' };
printf( "sizeof=%d\n", sizeof(xyz) );
printf( "x=%d y=%d z=%d c=%c\n", xyz.x, xyz.y, xyz.z, xyz.c );
return 0;
}
|
実行結果
sizeof=2
x=1 y=5 z=0 c=a
__attribute__ †
gcc の C言語拡張機能で、変数や関数に属性を付与できる。
__attribute__( (__unused__) ) | 使用されなくてもコンパイラがワーニングを出さない |
__attribute__( (aligned(x)) ) | アライメントをxに調整する |
__attribute__( (section("name")) ) | リンク時にセクション"name"に配置する |
__attribute__( (packed) ) | 構造体や共用体で、メンバの隙間を開けずに詰めて配置する |
使用例
1
2
3
4
5
|
-
|
|
!
|
int function( int arg1, int arg2 __attribute__( (__unused__) ) )
{
return arg1 + 1;
}
|
自動的に定義される定数 †
コンパイラによって、定義済の定数が存在する。主にデバッグ目的で使用する。
定数 | 意味 | 型 |
__FUNCTION__ | 関数名 | 文字列 |
__FILE__ | ファイル名 | 文字列 |
__LINE__ | 行数 | 数値 |
__DATE__ | コンパイルした時の日付 | 文字列 |
__TIME__ | コンパイルした時の時刻 | 文字列 |
__STDC__ | ANSI-Cに準拠していると値: 1 | 数値 |
__GLIBC__ | glibcのバージョン | 数値 |
使用例 test.c
1
2
3
4
5
6
7
|
-
|
|
!
|
#include <stdio.h>
int main(void)
{
printf("%s:%s:%d", __FUNCTION__, __FILE__, __LINE__);
return 0;
}
|
実行結果
main:test.c:5