この項では,CC-RHが扱うデータのそれぞれの型における,内部表現と値域について説明します。
領域の左端ビットは,符号付きの型(“unsigned”を伴わずに宣言された型)では,符号ビットとなります。符号付きの型において,値は2の補数表現で表されます。
浮動小数点型データの内部表現は,IEEE754注に準拠しています。領域の左端のビットは,符号ビットとなります。この符号ビットの値が0であれば正の値に,1であれば負の値になります。
IEEE:Institute of Electrical and Electronics Engineers(電気電信学会)の略称です。 |
-Xdbl_size=4指定時は,double,long double型はfloat型と同じ内部表現,値域を持ちます。
ポインタ型の内部表現は,unsigned int型の内部表現と同じです。
列挙型の内部表現は,singed int型の内部表現と同じです。領域の左端のビットは,符号ビットとなります。
-Xenum_type=autoオプション指定時には,「(31) 列挙型指定子」を参照してください。
配列型の内部表現は,配列の要素を,その要素の整列条件(alignment)を満たす形で並べたものとなります。
上記の例に示した配列に対する内部表現は,次のようになります。
構造体型の内部表現は,構造体の要素をその要素の整列条件を満たす形で並べたものとなります。
この例に示した構造体に対する内部表現は,次のようになります。
なお,構造体パッキング機能利用時の内部表現は,「4.2.4.8 構造体パッキング」を参照してください。
共用体はそのメンバがすべてオフセット0から始まり,そのメンバの任意のものを収容するのに十分なサイズを持つ構造体と考えられます。つまり,共用体型の内部表現は,同じアドレスに共用体の要素それぞれが単体で置かれているのと同様です。
この例に示した共用体に対する内部表現は,次のようになります。
ビット・フィールドに対しては,宣言された数のビットを含む領域が取られます。符号付きの型として,または符号を明示せずに宣言されたビット・フィールドに対しては,最上位ビットは符号ビットとなります。
最初に宣言されたビット・フィールドは,ビット・フィールド宣言時の型のサイズの領域の最下位ビットから割り当てられます。ビット・フィールドに対し,その前のビット・フィールドに続けて領域を割り当てると,その領域がそのビット・フィールドの宣言において指定された型の整列条件を満たす境界を越えてしまう場合,そのビット・フィールドに対する領域はその整列条件を満たしている境界から割り当てられます。
-Xbit_order=leftオプション,または#pragma bit_order leftを指定することで,ビット・フィールド・メンバを上位ビット側から割り当てることも可能です。詳細は,「4.2.4.9 ビット・フィールドの割り付け」を参照してください。
この例に示したビット・フィールドに対する内部表現は,次のようになります
この例に示したビット・フィールドに対する内部表現は,次のようになります
ビット・フィールドには_Bool,char,signed char,unsigned char,signed short,unsigned short,signed int,unsigned int,signed long,unsigned long,signed long long,unsigned long long,および列挙型を指定することができます。ただし,-lang=cオプションおよび-strict_stdオプション指定時は,int型と,unsigned int型のみを指定することができます。
なお,構造体パッキング機能利用時のビット・フィールドの内部表現は,「4.2.4.8 構造体パッキング」を参照してください。
ただし,CC-RHの-Xinline_strcpyを指定した場合,配列型はすべて4バイト境界となります。
共用体型に対する整列条件は,構造体を構成するメンバのうち,最大の整列条件をもつ型の整列条件と同じになります。
構造体型に対する整列条件は,構造体を構成するメンバのうち,最大の整列条件をもつ型の整列条件と同じになります。
struct ST { char c; /*1バイト・メンバ*/ short s; /*2バイト・メンバ*/ int i; /*4バイト・メンバ*/ long long ll; /*4バイト・メンバ*/ }; /*構造体は4バイトで整列*/ |
リロケータブルなオブジェクト・ファイルをリンクして実行可能なオブジェクト・ファイルを生成する際の整列条件は,2バイト境界となります。