4.1.3 処理系依存

この項では,ANSI規格における処理系依存項目について説明します。

(1)

データ型とサイズ

4.1.6 データの内部表現と領域」を参照してください。

(2)

翻訳段階

ANSI規格では,翻訳における構文規則間の優先順位を8つの翻訳段階(翻訳フェーズ)に規定しています。3段階目の“前処理字句と空白類文字の並びへの分割”で処理系定義となっている,“改行文字以外の空白類文字の空でない並び”は1つに置き換えられずそのまま保持されます。

(3)

診断メッセージ

何らかの構文規則違反,および制約違反を含む翻訳単位に対して,ソース・ファイル名,行番号(特定可能な場合のみ)を含むエラー・メッセージを出力します。なお,エラー・メッセージの書式は“ワーニング”,“致命的エラー”,“エラー”などに区別されます。出力形式については,「10.2 メッセージ出力形式」を参照してください。

(4)

プログラム開始処理

プログラム開始処理時に呼び出される関数の名前,型,および引数は特に規定しません。

したがって,ユーザ・オウン・コーディング,またはターゲット・システムに依存します。

(5)

プログラムの実行

対話型装置の構成については,特に規定しません。

したがって,ユーザ・オウン・コーディング,またはターゲット・システムに依存します。

(6)

文字集合

ソースおよび実行文字集合の要素の値は,ASCIIコード,EUC,SJIS,UTF-8,big5,gb2312です。

コメントと文字列における日本語/中国語記述をサポートしています。

(7)

多バイト文字のコード化で使用されるシフト状態

シフト状態はサポートしていません。

(8)

文字表示の意味

拡張表記の値は,次のように規定します。

表 4.1

拡張表記と意味

拡張表記

値(ASCII)

意味

\a

07

アラート(警告音)

\b

08

バックスペース

\f

0C

フォーム・フィード(改ページ)

\n

0A

ニュー・ライン(改行)

\r

0D

キャリッジ・リターン(復帰)

\t

09

水平タブ

\v

0B

垂直タブ

(9)

翻訳限界

翻訳に際して次の限界値があります。また,数量的な限界の他に動作するホスト・マシンのメモリに依存します。

-

1つの宣言中の1つの算術型,構造体型,共用体型,または不完全型を修飾するポインタ,配列および関数宣言子(の任意の組み合わせ)の個数は128となります。

-

switch文におけるcase値の最大数は2147483647です。

(10)

数量的限界

(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

 

(11)

識別子

識別子すべてが意味のあるものとして扱います。また,識別子の長さは無制限です。

なお,英字の大文字と小文字は区別されます。

(12)

char型

char型より大きな量をchar型に格納した場合,char型に型変換した値となります。

型指定子(signed,unsigned)の付かない単なるchar型は,符号付き整数(signed char)と同じ範囲の値を持ちます。

char    c = '\777';     /*cの値は-1となる*/

(13)

浮動小数点定数

浮動小数点定数は,IEEE754に準拠しています。

IEEE:Institute of Electrical and Electronics Engineers(電気電信学会)の略称です。
また,IEEE754とは,浮動小数点演算を扱うシステムにおいて,扱うデータ形式や数値範囲などの仕様の統一化を図った標準です。

(14)

文字定数

(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進数表記で示される値となります。

\777

511

<2>

単純エスケープ・シーケンスは,次のようになります。

\'

'

\"

"

\?

?

\\

\

<3>

\a,\b,\f,\n,\r,\t,\vについては,「(8) 文字表示の意味」で示されている値と同値になります。

(d)

多バイト文字の文字定数はサポートしていません。

(15)

文字列

文字列中に日本語/中国語が記述できます。

デフォルトの文字コードは,シフトJISとなります。

入力ソース・ファイルの中の文字コードは,CC-RHの-Xcharacter_setオプションで選択できます。

-Xcharacter_set=[none | euc_jp | sjis | utf8 | big5 | gb2312]

(16)

ロケール

ロケールはサポートしていません。

(17)

ヘッダ・ファイル名

ヘッダ・ファイル名の2つの形式(< >," ")内の列を,ヘッダ・ファイル,または外部ソース・ファイル名に反映する方法は,「(34) ヘッダ・ファイル取り込み」で規定します。

(18)

コメント

コメント中に日本語/中国語が記述できます。文字コードは,「(15) 文字列」の場合と同じです。

(19)

符号付き定数と符号なし定数

汎整数型の値がよりサイズの小さい符号付き整数に変換される場合,上位ビットを切り捨てて,ビット列イメージをコピーします。

また,符号なし整数が,対応する符号付き整数に変換される場合,内部表現は変化しません。

(20)

浮動小数点と汎整数

汎整数型の値が浮動小数点型に型変換される際,型変換される値が,表現しうる値の範囲内にはあるが正確に表現することができない場合,その結果は,表現しうる最も近い値へ丸められます。

(21)

double型とfloat型

double型をfloat型に変換する場合,またはlong double型をdouble型,またはfloat型に変換するとき,型変換される値が,表現しうる値の範囲内にはあるが正確に表現することができない場合,その結果は,表現しうる最も近い値へ丸められます。

(22)

ビット単位の演算子における符号付き型

ビット単位の演算子における符号付き型に対する特性は,シフト演算子については,「(28) ビット単位のシフト演算子」の規定に準じます。

また,その他の演算子については,符号なしの値として(ビット・イメージのままで)計算するものとします。

(23)

構造体と共用体のメンバ

共用体のメンバの値がそれと異なるメンバに格納される場合,整列条件にしたがって格納されるため,共用体オブジェクトのメンバを異なる型のメンバを用いてアクセスする場合,データの内部表現はアクセスする型に従います。

(24)

sizeof演算子

“sizeof”演算子の結果はunsigned long型を持ち,値は「4.1.6 データの内部表現と領域」における型の内部表現に準じます。

なお,構造体と共用体については,パディング領域を含んだバイト数とします。

(25)

キャスト演算子

ポインタを汎整数型に変換する場合,要求される変数のサイズは,unsigned long型と同じサイズです。変換結果は,ビット列がそのまま保存されます。

また,任意の整数はポインタに型変換できますが,整数をポインタに型変換した場合,整数のビットパターンがそのまま保持されます。

(26)

乗除/剰余演算子

整数同士の除算で割り切れず,オペランドが負の値をもつ場合,“/”演算子の結果は,除数,または被除数のいずれか一方が負の場合は,代数的な商よりも大きい最小の整数となります。

ただし,どちらも負の場合は,代数的な商よりも小さい最大の整数となります。

また,オペランドが負の値をもつ場合,“%”演算子の結果の符号は第1オペランドの符号とします。

(27)

加減演算子

同一配列の要素を指す2つのポインタが減算される場合,結果の型はint型となります。

(28)

ビット単位のシフト演算子

“E1 >> E2”において,E1が符号付きの型で負の値をもつ場合,算術シフトを行います。

(29)

記憶域クラス指定子

記憶域クラス指定子“register”の宣言の有無にかかわらず,可能なかぎり高速にアクセスするように最適化を行います。

(30)

構造体と共用体指定子

(a)

signed,unsignedの付かない単なるint型ビット・フィールドは,符号付きとして扱い,最上位ビットは符号ビットとして扱います。

(b)

ビット・フィールドを保持するために,十分な大きさの任意のアドレス付け可能な記憶域単位を割り付けることができますが,十分な領域がなかった場合,合わなかったビット・フィールドはフィールドの型の整列条件に合わせて次の単位に詰め込まれます。
単位内のビット・フィールドのデフォルトの割り付け順序は下位から上位です。割り付け順序は-Xbit_orderオプションまたは#pragma bit_order指令で選択できます。

(c)

1つの構造体,または共用体の非ビット・フィールドの各メンバは,次のように境界整列されます。

char,unsignd char型,およびその配列

バイト境界

short,unsigned short型,およびその配列

2バイト境界

その他(ポインタを含む)

4バイト境界

ただし,パッキングをした場合は,すべてのメンバの境界はパッキングの指定値に依存します。

(31)

列挙型指定子

列挙型の型は,signed int型とします。

ただし,-Xenum_type=autoオプション指定時は,各列挙型について,その型のすべての列挙子の値を表現可能な最小の整数型として扱います。

(32)

型修飾子

“volatile”修飾された型をもつデータへのアクセスは,データがマッピングされているアドレス(I/Oポートなど)に依存します。ただし,同変数へのアクセス箇所への最適化は行われません。

(33)

条件組み込み

(a)

条件組み込みで指定される文字定数に対する値と,その他の式中に現れる文字定数の値とは等しくなります。

(b)

単一文字の文字定数は,負の値を持ちません。

(34)

ヘッダ・ファイル取り込み

(a)

“#include <文字列>”という形式の前処理指示

“#include <文字列>”という形式の前処理指示は,“文字列”がフルパスのファイル名でない場合,指定されたフォルダ(-Iオプション)からヘッダ・ファイルを検索し,次に標準インクルード・ファイル・フォルダ(ccrhが置かれたbinフォルダからの相対パスでの..\incフォルダ)を検索します。

なお,“<”と“>”の区切り記号の間に指定された文字列で一意に識別されるヘッダ・ファイルを探し出すと,そのヘッダ・ファイルの内容全体で置き換えます。

“\”と“/”の両者がフォルダの区切りとしてみなされます。

 

#include    <header.h>

検索順は,次のとおりです。

-

-Iで指定したフォルダ

-

標準インクルード・ファイル・フォルダ

(b)

“#include "文字列"”という形式の前処理指示

“#include "文字列"”という形式の前処理指示は,“文字列”がフルパスのファイル名でない場合,ソース・ファイルがあるフォルダからヘッダ・ファイルを検索し,次に,指定したフォルダ(-Iオプション),最後に標準インクルード・ファイル・フォルダ(ccrhが置かれたbinフォルダからの相対パスでの..\incフォルダ)を検索します。

なお,“ " ”“ " ”の区切り記号の間に指定された文字列で一意に識別されるヘッダ・ファイルを探し出すと,そのヘッダ・ファイルの内容全体で置き換えます。

“\”と“/”の両者がフォルダの区切りとしてみなされます。

 

#include    "header.h"

検索順は,次のとおりです。

-

ソース・ファイルがあるフォルダ

-

-Iで指定したフォルダ

-

標準インクルード・ファイル・フォルダ

(c)

“#include 前処理字句列”という形式

“#include前処理字句列”という形式において,前処理字句列が単一で<文字列>,または"文字列"の形式に置換されるマクロである場合にのみ,単一のヘッダ・ファイル名の前処理字句として扱われます。

(d)

“#include <文字列>”という形式の前処理指示

(最終的に)区切られた列とヘッダ・ファイル名との間においては,列中の英文字の長さを判別し,

コンパイラ動作環境において有効なファイル名長までが有効

となります。ファイルを探すフォルダについては,上記の規定に準じます。

(35)

#pragma指令

4.2.3 #pragma指令」を参照してください。

(36)

あらかじめ定義されたマクロ名

以下に,サポートしているマクロ名を示します。

表 4.5

サポートしているマクロ

マクロ名

定義

__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__は常に定義を持ちます。

注 2.

-Xansiオプション指定時の処理については,「4.1.5 ANSI規格に厳密な処理オプション」を参照してください。

(37)

NULLマクロ

NULLマクロの定義は次のとおりです。

#define NULL ((void *) 0)

(38)

標準ライブラリ関数

標準ライブラリの処理系依存項目は次のとおりです。

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関数のための時点

時間を扱う関数をサポートしていません。