Study for Embededd System

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;  // 1bitのデータ
  unsigned char y : 3;  // 3bitのデータ
  unsigned char z : 2;  // 2bitのデータ
  char c;  // 1byte(8bit)のデータ
};
 
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;
  // arg2 を使用しなくても、コンパイル時に警告されない
}

自動的に定義される定数

コンパイラによって、定義済の定数が存在する。主にデバッグ目的で使用する。

定数意味
__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
リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

最終更新日: Sun, 15 May 2005 21:06:26 JST (7131d)

G|Cg|C@Amazon Yahoo yV

z[y[W yVoC[UNLIMIT1~] COiq COsI