この項では,ANSI規格における処理系依存項目について説明します。
「4.1.6 データの内部表現と領域」を参照してください。
ANSI規格では,翻訳における構文規則間の優先順位を8つの翻訳段階(翻訳フェーズ)に規定しています。3段階目の“前処理字句と空白類文字の並びへの分割”で処理系定義となっている,“改行文字以外の空白類文字の空でない並び”は1つに置き換えられずそのまま保持されます。
何らかの構文規則違反,および制約違反を含む翻訳単位に対して,ソース・ファイル名,行番号(特定可能な場合のみ)を含むエラー・メッセージを出力します。なお,エラー・メッセージの書式は“ワーニング”,“致命的エラー”,“エラー”などに区別されます。出力形式については,「10.2 メッセージ出力形式」を参照してください。
プログラム開始処理時に呼び出される関数の名前,型,および引数は特に規定しません。
したがって,ユーザ・オウン・コーディング,またはターゲット・システムに依存します。
対話型装置の構成については,特に規定しません。
したがって,ユーザ・オウン・コーディング,またはターゲット・システムに依存します。
ソースおよび実行文字集合の要素の値は,ASCIIコード,EUC,SJIS,UTF-8,big5,gb2312です。
コメントと文字列における日本語/中国語記述をサポートしています。
(7) | 多バイト文字のコード化で使用されるシフト状態 |
シフト状態はサポートしていません。
拡張表記の値は,次のように規定します。
|
|
|
\a
|
07
|
アラート(警告音)
|
\b
|
08
|
バックスペース
|
\f
|
0C
|
フォーム・フィード(改ページ)
|
\n
|
0A
|
ニュー・ライン(改行)
|
\r
|
0D
|
キャリッジ・リターン(復帰)
|
\t
|
09
|
水平タブ
|
\v
|
0B
|
垂直タブ
|
翻訳に際して次の限界値があります。また,数量的な限界の他に動作するホスト・マシンのメモリに依存します。
- | 1つの宣言中の1つの算術型,構造体型,共用体型,または不完全型を修飾するポインタ,配列および関数宣言子(の任意の組み合わせ)の個数は128となります。 |
- | switch文におけるcase値の最大数は2147483647です。 |
(a) | 汎整数型の限界値(limits.hファイル) |
汎整数型(char型,符号付き/符号なし整数型,および列挙型)で表現できる値の各種限界値をlimits.hファイルに定義しています。
なお,多バイト文字はサポートしていないため,MB_LEN_MAXは該当する限界値を持ちません。そこで,MB_LEN_MAXには1として,定義のみ行っています。
次に,limits.hファイルで定義されている各種限界値を示します。
表 4.2 | 汎整数型の各種限界値(limits.hファイル) |
|
|
|
CHAR_BIT
|
+8
|
ビット・フィールドではない最小のオブジェクトのビット数(= 1バイト)
|
SCHAR_MIN
|
-128
|
signed char型の最小値
|
SCHAR_MAX
|
+127
|
signed char型の最大値
|
UCHAR_MAX
|
+255
|
unsigned char型の最大値
|
CHAR_MIN
|
-128
|
char型の最小値
|
CHAR_MAX
|
+127
|
char型の最大値
|
SHRT_MIN
|
-32768
|
short int型の最小値
|
SHRT_MAX
|
+32767
|
short int型の最大値
|
USHRT_MAX
|
+65535
|
unsigned short int型の最大値
|
INT_MIN
|
-2147483648
|
int型の最小値
|
INT_MAX
|
+2147483647
|
int型の最大値
|
UINT_MAX
|
+4294967295
|
unsigned int型の最大値
|
LONG_MIN
|
-2147483648
|
long int型の最小値
|
LONG_MAX
|
+2147483647
|
long int型の最大値
|
ULONG_MAX
|
+4294967295
|
unsigned long int型の最大値
|
LLONG_MIN
|
-9223372036854775808
|
long long int型の最小値
|
LLONG_MAX
|
+9223372036854775807
|
long long int型の最大値
|
ULLONG_MAX
|
+18446744073709551615
|
unsigned long long int型の最大値
|
(b) | 浮動小数点型の各種限界値(float.hファイル) |
浮動小数点型の特性に関する各種限界値をfloat.hファイルに定義しています。
次に,float.hファイルで定義されている各種限界値を示します。
表 4.3 | 浮動小数点型の各種限界値の定義(float.hファイル) |
|
|
|
FLT_ROUNDS
|
1(-Xround=nearest指定時)
0(-Xround=zero指定時)
|
浮動小数点加算に対する丸めのモード
1(最も近い方向へ丸める)とする。
0(ゼロ方向へ丸める)とする。
|
FLT_RADIX
|
+2
|
指数表現の基数(b)
|
FLT_MANT_DIG
|
+24
|
浮動小数点仮数部におけるFLT_RADIXを底とする数字の数(p)
|
DBL_MANT_DIG
|
+53
|
LDBL_MANT_DIG
|
+53
|
FLT_DIG
|
+6
|
q桁の10進数の浮動小数点数を基数bのp桁をもつ浮動小数点数に丸めることができ,再び変更なしにq桁の10進数値に戻すことが可能な10進数の桁数(q)
|
DBL_DIG
|
+15
|
LDBL_DIG
|
+15
|
FLT_MIN_EXP
|
-125
|
FLT_RADIXをその値から1引いた値でべき乗したとき,正規化された浮動小数点数となるような最小の負の整数
(emin)
|
DBL_MIN_EXP
|
-1021
|
LDBL_MIN_EXP
|
-1021
|
FLT_MIN_10_EXP
|
-37
|
10をその値でべき乗したとき,正規化された浮動小数点数の範囲内になるような最小の負の整数
log10bemin-1
|
DBL_MIN_10_EXP
|
-307
|
LDBL_MIN_10_EXP
|
-307
|
FLT_MAX_EXP
|
+128
|
FLT_RADIXをその値から1引いた値でべき乗したとき,表現可能な有限浮動小数点数となるような最大の整数
(emax)
|
DBL_MAX_EXP
|
+1024
|
LDBL_MAX_EXP
|
+1024
|
FLT_MAX_10_EXP
|
+38
|
10をその値でべき乗したとき,表現可能な有限浮動小数点数の範囲内になるような最大の整数
log10 ((1 - b-p) * bemax)
|
DBL_MAX_10_EXP
|
+308
|
LDBL_MAX_10_EXP
|
+308
|
FLT_MAX
|
3.40282347E + 38F
|
表現可能な有限浮動小数点数の最大値
(1 - b-p)*bemax
|
DBL_MAX
|
1.7976931348623158E+308
|
LDBL_MAX
|
1.7976931348623158E+308
|
FLT_EPSILON
|
1.19209290E - 07F
|
指定された浮動小数点型で表現できる1.0と,1.0より大きい最も小さい値との差異
b1 - p
|
DBL_EPSILON
|
2.2204460492503131E-016
|
LDBL_EPSILON
|
2.2204460492503131E-016
|
FLT_MIN
|
1.17549435E - 38F
|
正規化された正の浮動小数点数の最小値
bemin - 1
|
DBL_MIN
|
2.2250738585072014E-308
|
LDBL_MIN
|
2.2250738585072014E-308
|
(c) | 浮動小数点型の各種限界値(half.hファイル)【V1.05.00以降】 |
浮動小数点型の特性に関する各種限界値をhalf.hファイルに定義しています。
次に,half.hファイルで定義されている各種限界値を示します。
表 4.4 | 浮動小数点型の各種限界値の定義(half.hファイル) |
|
|
|
HALF_MANT_DIG
|
+11
|
浮動小数点仮数部におけるFLT_RADIXを底とする数字の数(p)
|
HALF_DIG
|
+2
|
q桁の10進数の浮動小数点数を基数bのp桁をもつ浮動小数点数に丸めることができ,再び変更なしにq桁の10進数値に戻すことが可能な10進数の桁数(q)
|
HALF_MIN_EXP
|
-13
|
FLT_RADIXをその値から1引いた値でべき乗したとき,正規化された浮動小数点数となるような最小の負の整数
(emin)
|
HALF_MIN_10_EXP
|
-4
|
10をその値でべき乗したとき,正規化された浮動小数点数の範囲内になるような最小の負の整数
log10bemin-1
|
HALF_MAX_EXP
|
+16
|
FLT_RADIXをその値から1引いた値でべき乗したとき,表現可能な有限浮動小数点数となるような最大の整数
(emax)
|
HALF_MAX_10_EXP
|
+4
|
10をその値でべき乗したとき,表現可能な有限浮動小数点数の範囲内になるような最大の整数
log10 ((1 - b-p) * bemax)
|
HALF_MAX
|
65504.0F
|
表現可能な有限浮動小数点数の最大値
(1 - b-p)*bemax
|
HALF_EPSILON
|
0.00097656F
|
指定された浮動小数点型で表現できる1.0と,1.0より大きい最も小さい値との差異
b1 - p
|
HALF_MIN
|
6.10352E-05F
|
正規化された正の浮動小数点数の最小値
bemin - 1
|
識別子すべてが意味のあるものとして扱います。また,識別子の長さは無制限です。
なお,英字の大文字と小文字は区別されます。
char型より大きな量をchar型に格納した場合,char型に型変換した値となります。
型指定子(signed,unsigned)の付かない単なるchar型は,符号付き整数(signed char)と同じ範囲の値を持ちます。
char c = '\777'; /*cの値は-1となる*/
|
浮動小数点定数は,IEEE754注に準拠しています。
注 | IEEE:Institute of Electrical and Electronics Engineers(電気電信学会)の略称です。
また,IEEE754とは,浮動小数点演算を扱うシステムにおいて,扱うデータ形式や数値範囲などの仕様の統一化を図った標準です。 |
(a) | ソース・プログラムの文字集合と実行環境における文字集合は,基本的に両者ともASCIIコードで,同一の値をもつメンバと対応します。
ただし,ソース・プログラムにおける文字列には,日本語文字コードが使用できます(「(8) 文字表示の意味」を参照)。 |
(b) | 4文字までの文字を含む単純文字定数は,末尾の文字を下位バイト,先頭の文字を上位バイトに持つint型の値を持ちます。5文字以上の文字を持つ文字定数はエラーとなります。 |
int a1 = ‘a’; /* 0x61 */
int a2 = ‘ab’; /* 0x6162 */
int a3 = ‘abc’; /* 0x616263 */
int a4 = ‘abcd’; /* 0x61626364 */
int a5 = ‘abcde’; /* エラー */
|
(c) | 基本的な実行環境文字集合で表現されない文字やエスケープ・シーケンスを含む場合,次のようになります。 |
<1> | 8進数エスケープ・シーケンス,および16進数エスケープ・シーケンスは,その8進数表記,および16進数表記で示される値となります。 |
<2> | 単純エスケープ・シーケンスは,次のようになります。 |
<3> | \a,\b,\f,\n,\r,\t,\vについては,「(8) 文字表示の意味」で示されている値と同値になります。 |
(d) | 多バイト文字の文字定数はサポートしていません。 |
文字列中に日本語/中国語が記述できます。
デフォルトの文字コードは,シフトJISとなります。
入力ソース・ファイルの中の文字コードは,CC-RHの-Xcharacter_setオプションで選択できます。
-Xcharacter_set=[none | euc_jp | sjis | utf8 | big5 | gb2312]
|
ロケールはサポートしていません。
ヘッダ・ファイル名の2つの形式(< >," ")内の列を,ヘッダ・ファイル,または外部ソース・ファイル名に反映する方法は,「(34) ヘッダ・ファイル取り込み」で規定します。
コメント中に日本語/中国語が記述できます。文字コードは,「(15) 文字列」の場合と同じです。
汎整数型の値がよりサイズの小さい符号付き整数に変換される場合,上位ビットを切り捨てて,ビット列イメージをコピーします。
また,符号なし整数が,対応する符号付き整数に変換される場合,内部表現は変化しません。
汎整数型の値が浮動小数点型に型変換される際,型変換される値が,表現しうる値の範囲内にはあるが正確に表現することができない場合,その結果は,表現しうる最も近い値へ丸められます。
double型をfloat型に変換する場合,またはlong double型をdouble型,またはfloat型に変換するとき,型変換される値が,表現しうる値の範囲内にはあるが正確に表現することができない場合,その結果は,表現しうる最も近い値へ丸められます。
ビット単位の演算子における符号付き型に対する特性は,シフト演算子については,「(28) ビット単位のシフト演算子」の規定に準じます。
また,その他の演算子については,符号なしの値として(ビット・イメージのままで)計算するものとします。
共用体のメンバの値がそれと異なるメンバに格納される場合,整列条件にしたがって格納されるため,共用体オブジェクトのメンバを異なる型のメンバを用いてアクセスする場合,データの内部表現はアクセスする型に従います。
“sizeof”演算子の結果はunsigned long型を持ち,値は「4.1.6 データの内部表現と領域」における型の内部表現に準じます。
なお,構造体と共用体については,パディング領域を含んだバイト数とします。
ポインタを汎整数型に変換する場合,要求される変数のサイズは,unsigned long型と同じサイズです。変換結果は,ビット列がそのまま保存されます。
また,任意の整数はポインタに型変換できますが,整数をポインタに型変換した場合,整数のビットパターンがそのまま保持されます。
整数同士の除算で割り切れず,オペランドが負の値をもつ場合,“/”演算子の結果は,除数,または被除数のいずれか一方が負の場合は,代数的な商よりも大きい最小の整数となります。
ただし,どちらも負の場合は,代数的な商よりも小さい最大の整数となります。
また,オペランドが負の値をもつ場合,“%”演算子の結果の符号は第1オペランドの符号とします。
同一配列の要素を指す2つのポインタが減算される場合,結果の型はint型となります。
“E1 >> E2”において,E1が符号付きの型で負の値をもつ場合,算術シフトを行います。
記憶域クラス指定子“register”の宣言の有無にかかわらず,可能なかぎり高速にアクセスするように最適化を行います。
(a) | signed,unsignedの付かない単なるint型ビット・フィールドは,符号付きとして扱い,最上位ビットは符号ビットとして扱います。 |
(b) | ビット・フィールドを保持するために,十分な大きさの任意のアドレス付け可能な記憶域単位を割り付けることができますが,十分な領域がなかった場合,合わなかったビット・フィールドはフィールドの型の整列条件に合わせて次の単位に詰め込まれます。
単位内のビット・フィールドのデフォルトの割り付け順序は下位から上位です。割り付け順序は-Xbit_orderオプションまたは#pragma bit_order指令で選択できます。 |
(c) | 1つの構造体,または共用体の非ビット・フィールドの各メンバは,次のように境界整列されます。 |
char,unsignd char型,およびその配列
|
バイト境界
|
short,unsigned short型,およびその配列
|
2バイト境界
|
その他(ポインタを含む)
|
4バイト境界
|
ただし,パッキングをした場合は,すべてのメンバの境界はパッキングの指定値に依存します。
列挙型の型は,signed int型とします。
ただし,-Xenum_type=autoオプション指定時は,各列挙型について,その型のすべての列挙子の値を表現可能な最小の整数型として扱います。
“volatile”修飾された型をもつデータへのアクセスは,データがマッピングされているアドレス(I/Oポートなど)に依存します。ただし,同変数へのアクセス箇所への最適化は行われません。
(a) | 条件組み込みで指定される文字定数に対する値と,その他の式中に現れる文字定数の値とは等しくなります。 |
(a) | “#include <文字列>”という形式の前処理指示 |
“#include <文字列>”という形式の前処理指示は,“文字列”がフルパスのファイル名でない場合注,指定されたフォルダ(-Iオプション)からヘッダ・ファイルを検索し,次に標準インクルード・ファイル・フォルダ(ccrhが置かれたbinフォルダからの相対パスでの..\incフォルダ)を検索します。
なお,“<”と“>”の区切り記号の間に指定された文字列で一意に識別されるヘッダ・ファイルを探し出すと,そのヘッダ・ファイルの内容全体で置き換えます。
注 | “\”と“/”の両者がフォルダの区切りとしてみなされます。 |
検索順は,次のとおりです。
(b) | “#include "文字列"”という形式の前処理指示 |
“#include "文字列"”という形式の前処理指示は,“文字列”がフルパスのファイル名でない場合注,ソース・ファイルがあるフォルダからヘッダ・ファイルを検索し,次に,指定したフォルダ(-Iオプション),最後に標準インクルード・ファイル・フォルダ(ccrhが置かれたbinフォルダからの相対パスでの..\incフォルダ)を検索します。
なお,“ " ”“ " ”の区切り記号の間に指定された文字列で一意に識別されるヘッダ・ファイルを探し出すと,そのヘッダ・ファイルの内容全体で置き換えます。
注 | “\”と“/”の両者がフォルダの区切りとしてみなされます。 |
検索順は,次のとおりです。
(c) | “#include 前処理字句列”という形式 |
“#include前処理字句列”という形式において,前処理字句列が単一で<文字列>,または"文字列"の形式に置換されるマクロである場合にのみ,単一のヘッダ・ファイル名の前処理字句として扱われます。
(d) | “#include <文字列>”という形式の前処理指示 |
(最終的に)区切られた列とヘッダ・ファイル名との間においては,列中の英文字の長さを判別し,
コンパイラ動作環境において有効なファイル名長までが有効
|
となります。ファイルを探すフォルダについては,上記の規定に準じます。
「4.2.3 #pragma指令」を参照してください。
以下に,サポートしているマクロ名を示します。
|
|
__LINE__
|
その時点でのソース行の行番号(10進数)。
|
__FILE__
|
ソース・ファイルの名前(文字列定数)。
|
__DATE__
|
ソース・ファイルの翻訳日付(“Mmm dd yyyy”の形式をもつ文字列定数。
ここで,月の名前はANSI規格で規定されているasctime関数で生成されるもの(英字3文字の並びで最初の1文字のみ大文字)と同じもの。ddの最初の文字は値が10より小さい場合空白とします)。注1
|
__TIME__
|
ソース・ファイルの翻訳時間(asctime関数で生成される時間と同じような“hh : mm : ss”の型式をもつ文字列定数)。注1
|
__STDC__
|
10進定数1(-Xansiオプション指定時に定義)。注2
|
__RENESAS__
|
値は設定されません。
|
__RENESAS_VERSION__
|
バージョンがV.XX.YY.ZZの場合,0xXXYYZZ00とします。
例)V.1.00.00 → -D__RENESAS_VERSION__=0x01000000
|
__CCRH__
|
値は設定されません。
|
__CCRH
|
値は設定されません。
|
__RH850__
|
値は設定されません。
|
__RH850
|
値は設定されません。
|
__v850e3v5__
|
値は設定されません(-Xcommon オプションで,v850e3v5,またはrh850を指定した場合に定義)。
|
__v850e3v5
|
値は設定されません(-Xcommon オプションで,v850e3v5,またはrh850を指定した場合に定義)。
|
__DBL4
|
-Xdbl_size=4指定時のみ
値は設定されません。
|
__DBL8
|
-Xdbl_size=8 指定時または-Xdbl_size 指定がない場合
値は設定されません。
|
__DOUBLE_IS_64BITS__
|
-Xdbl_size=8 指定時または-Xdbl_size 指定がない場合
値は設定されません。
|
__DOUBLE_IS_32BITS__
|
-Xdbl_size=4 指定時のみ
値は設定されません。
|
__RON
|
-Xround=nearest指定時のみ
値は設定されません
|
__ROZ
|
-Xround=zero指定時のみ
値は設定されません
|
__BITLEFT
|
値は設定されません(-Xbit_orderオプションで,leftを指定した場合に定義)。
|
__BITRIGHT
|
値は設定されません(-Xbit_orderオプションで,rightを指定した場合に定義)。
|
__AUTO_ENUM
|
値は設定されません(-Xenum_typeオプションで,autoを指定した場合に定義)。
|
__FPU
|
値は設定されません(-Xfloatオプションで,fpuを指定した場合に定義)。
|
__CHAR_SIGNED__
|
値は設定されません。
|
レジスタ・モード・マクロ
|
レジスタ・モードと定義されるマクロは次のとおりです。
32レジスタ・モード : __reg32__
22レジスタ・モード : __reg22__
汎用レジスタ・モード : __reg_common__
|
_LIT
|
値は設定されません。
|
__MULTI_LEVEL__
|
-Xmulti_level=levelで指定したlevel値
|
注 1. | 翻訳日付または翻訳時刻を得られない場合はなく,__DATE__,__TIME__は常に定義を持ちます。 |
NULLマクロの定義は次のとおりです。
#define NULL ((void *) 0)
|
標準ライブラリの処理系依存項目は次のとおりです。
isalnum関数,isalpha関数,iscntrl関数,islower関数,isprint関数およびisupper関数によってテストされる文字集合
|
unsigned char型(0〜255)およびEOF(-1)です。
|
数学関数に定義域エラーが発生した場合に返される値
|
「7.1 提供ライブラリ」の各関数の説明を参照してください。
|
アンダーフロー値域エラーの場合に数学関数がマクロERANGEの値を整数式errnoに設定するか否か
|
「7.1 提供ライブラリ」の各関数の説明を参照してください。
|
fmod関数の第2引数が0の場合に定義域エラーが発生するかまたは0が返されるか
|
「7.4.10 数学関数 fmod関数」の各関数の説明を参照してください。
|
signal関数に対するシグナルの集合
|
signal関数をサポートしていません。
|
signal関数によって認識されるシグナルの意味
|
signal関数をサポートしていません。
|
signal関数によって認識されるシグナルに対する既定の処理およびプログラム開始時の処理
|
signal関数をサポートしていません。
|
シグナル処理ルーチンの呼び出し前に signal(sig, SIG_DFL); と同等のことが実行されない場合のシグナルの遮断の処置
|
signal関数をサポートしていません。
|
シグナル関数によって指定された処理ルーチンによってSIGILLシグナルが受け付けられる場合に既定の処理が再設定されるか否か
|
signal関数をサポートしていません。
|
テキストストリームの最終行が終了を示す改行文字を必要とするか否か
|
改行文字を必要としません。
|
データが読み取られるとき,改行文字の直前にテキストストリームに書き込まれた空白文字の並びが現れるか否か
|
現れます。
|
バイナリストリームに書き込むデータに付加しても良い NULL 文字の個数
|
0個です。
|
追加モードのストリームのファイル位置表示子が,最初にファイルの先頭または終わりのどちらに位置付けされるか
|
ファイル操作関数をサポートしていません。
|
テキストストリームへの書き込みが,結び付けられたファイルを最終書き込み点の直後で切り捨てるか否か
|
ファイル操作関数をサポートしていません。
|
ファイルバッファリングの特性
|
ファイル操作関数をサポートしていません。
|
長さ0のファイルが実際に存在するか否か
|
ファイル操作関数をサポートしていません。
|
正しいファイル名の規則
|
ファイル操作関数をサポートしていません。
|
同一ファイルを複数回オープンすることが可能か否か
|
ファイル操作関数をサポートしていません。
|
オープンされているファイルに対するremove関数の効果
|
remove関数をサポートしていません。
|
rename関数呼出し前に新しい名前を持つファイルが存在している場合の効果
|
rename関数をサポートしていません。
|
fprintf関数の%p変換による出力
|
「7.4.7 標準入出力関数 sprintf(5)型指定文字」を参照してください。
|
fscanf関数中の%p変換に対する入力
|
「7.4.7 標準入出力関数 sscanf(4)型指定文字」を参照してください。
|
fscanf関数中の%[変換において文字 - が走査文字の並び中の最初の文字でも最後の文字でもない場合の解釈
|
「7.4.7 標準入出力関数 sscanf(4)型指定文字」を参照してください。
|
fgetpos関数またはftell関数が失敗した場合に,マクロerrnoに設定される値
|
fgetpos関数,ftell関数をサポートしていません。
|
perror関数によって生成されるメッセージ
|
「7.4.7 標準入出力関数 perror」を参照してください。
|
要求された大きさが0の場合のcalloc関数,malloc関数またはrealloc関数の動作
|
要求された大きさを8とみなします。
|
オープンされているファイルおよび一時ファイルに関してのabort関数の動作
|
ファイル操作関数をサポートしていません。
|
exit関数の実引数の値が0,EXIT_SUCCESSまたはEXIT_FAILURE以外の場合に返される状態
|
exit関数をサポートしていません。
|
getenv関数によって使われる環境の名前の集合および環境の並びを変更する方法
|
getenv関数をサポートしていません。
|
system関数による文字列の実行モードおよび内容
|
system関数をサポートしていません。
|
strerror関数によって返されるエラーメッセージ文字列の内容
|
「7.4.3 文字列関数 strerror関数」を参照してください。
|
地方時および夏時間
|
time.hをサポートしていません。
|
clock関数のための時点
|
時間を扱う関数をサポートしていません。
|