4.1.3 処理系依存

言語仕様で規定していない処理系定義項目について、コンパイラの仕様を示します

(1)

翻訳

表 4.1

翻訳の仕様

 

項目

コンパイラの仕様

1

診断メッセージ

何らかの構文規則違反、および制約違反を含む翻訳単位に対して、ソース・ファイル名、行番号(特定可能な場合のみ)を含むエラー・メッセージを出力します。

 

(2)

環境

表 4.2

環境の仕様

 

項目

コンパイラの仕様

1

main関数への実引数の意味

規定しません。

2

対話的入出力装置の構成

規定しません。

 

(3)

識別子

表 4.3

識別子の仕様

 

項目

コンパイラの仕様

1

外部結合とならない識別子(内部名)の有効文字数

先頭から8189文字までを意味のあるものとして扱います。

2

外部結合となる識別子(外部名)の有効文字数

先頭から8191文字までを意味のあるものとして扱います。

3

外部結合となる識別子(外部名)の大文字と小文字の区別

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

 

(4)

文字

表 4.4

文字の仕様

 

項目

コンパイラの仕様

1

ソース文字集合および実行文字集合の要素

どちらもASCIIコードです。利用できる多バイト文字は、EUC、SJIS、UTF-8、big5、gb2312です。コメントと文字列における日本語/中国語記述をサポートしています。

2

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

シフト状態に依存した表現形式を持ちません。

3

プログラム実行時の文字集合の文字のビット数

文字は8ビットです。多バイト文字は16ビットです。

4

文字定数内、文字列内のソース文字集合の文字と実行文字集合の文字との対応付け

ソース文字集合の要素と、実行文字集合の要素は一致します。

5

言語で規定していない文字や拡張表記を含む整数文字定数の値

8進数エスケープ・シーケンス、および16進数エスケープ・シーケンスは、その8進数表記、および16進数表記で示される値となります。

6

2文字以上の文字を含む単純文字定数または2文字以上の多バイト文字を含むワイド文字定数の値

4バイト(ASCIIであれば4文字相当)の文字を含む整数文字定数の値は、4バイト全てが有効値となります。5バイト以上はエラー・メッセージを出力します。

7

多バイト文字をワイド文字に変換するために使用されるlocaleの仕様

localeはサポートしていません。

8

char型の値

型指定子(signed、unsigned)の付かない単なるchar型は、符号無し整数(unsigned char)として扱います。ただしオプションにより変更可能です。

 

(5)

整数

表 4.5

整数の仕様

 

項目

コンパイラの仕様

1

整数型の表現方法とその値

表 4.6に示します。

2

整数の値がより短いサイズの符号付き整数型、または符号なし整数型を同一のサイズの符号付き整数型に変換したときの値(結果の値が変換先の型で表現できない場合)

少ないビット数へ変換する場合は、少ないビット数のビット幅でマスクをした(上位ビットを削除した)ビット列とします。符号なし整数を同じビット数の符号付き整数に変換する場合は、ビット列をそのままコピーします。

3

符号付き整数に対するビットごとの演算の結果

シフト演算子については本表5項を参照してください。その他の演算子については、符号なしの値として(ビット・イメージのままで)計算するものとします。

4

整数除算における剰余の符号

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

5

負の値を持つ符号付きスカラ型の右シフトの結果

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

 

表 4.6

整数型とその値の範囲

 

値の範囲

データサイズ

1

char*1

0〜255

1バイト

2

signed char

-128〜127

1バイト

3

unsigned char

0〜255

1バイト

4

short

signed short

-32768〜32767

2バイト

5

unsigned short

0〜65535

2バイト

6

int*2

signed int*2

-2147483648〜2147483647

4バイト

7

unsigned int*2

0〜4294967295

4バイト

8

long

signed long

-2147483648〜2147483647

4バイト

9

unsigned long

0〜4294967295

4バイト

10

long long

signed long long

-9223372036854775808〜9223372036854775807

8バイト

11

unsigned long long

0〜18446744073709551615

8バイト

注 1.

signed_charオプションを指定した場合、signed char型と同じ値の範囲を持ちます。

注 2.

int_to_shortオプションを指定した場合、int型はshort型、signed int型はsigned short型、unsigned int型はunsigned short型としてそれぞれ扱います。

 

(6)

浮動小数点

表 4.7

浮動小数点の仕様

 

項目

コンパイラの仕様

1

浮動小数点の表現方法とその値

浮動小数点型には、float型、double型とlong double型があります。浮動小数点型の内部表現や変換仕様、演算仕様等の性質は「4.1.4 データの内部表現と領域」の「 (5) 浮動小数点型の仕様」で説明します。表 4.8に、浮動小数点型の表現可能な値の限界値を示します。

2

整数を本来の値に正確に表現することができない浮動小数点型に変換したときの切り捨て方向

次のいずれかの条件を満たす場合、最近値の方向に切り捨てます。

-

-nofpuを指定

-

-cpu=rx200を指定

-

-cpu=rx600または-isa=rxv1を指定し、かつ変換する対象の整数が符号なしである

それ以外の場合、FPSWのRM[0:1]ビットに従います。

3

浮動小数点型をより狭い浮動小数点型に変換したときの切り捨てまたは丸め方法

最近値に丸めます。

表 4.8

浮動小数点型の限界値

 

項目

限界値

10進数表現*1

内部表現(16進数)

1

float型の最大値

3.4028235677973364e+38f (3.4028234663852886e+38f)

7f7fffff

2

float型の正の最小値

7.0064923216240862e-46f (1.4012984643248171e-45f)

00000001

3

double*2

long double*2

型の最大値

1.7976931348623158e+308 (1.7976931348623157e+308)

7fefffffffffffff

4

double*2

long double*2

型の正の最小値

4.9406564584124655e-324 (4.9406564584124654e-324)

0000000000000001

注 1.

10進数表現の限界値は0または無限大にならない限界値です。また、( )内は理論値を示します。

注 2.

dbl_size=8を指定した場合の解釈です。dbl_size=4を指定した場合、double型およびlong double型はfloat型と同じ値となります。

 

(7)

配列とポインタ

表 4.9

配列とポインタの仕様

 

項目

コンパイラの仕様

1

配列の大きさの最大値を保持するために必要な整数の型(size_t)

unsigned long型とします。

2

ポインタ型から整数型への変換

(ポインタ型のサイズ≧整数型のサイズ)

ポインタ型の下位バイトの値になります。

3

ポインタ型から整数型への変換

(ポインタ型のサイズ<整数型のサイズ)

ゼロ拡張します。

4

整数型からポインタ型への変換

(整数型のサイズ≧ポインタ型のサイズ)

整数型の下位バイトの値となります。

5

整数型からポインタ型への変換

(整数型のサイズ<ポインタ型のサイズ)

符号拡張します。

6

同じ配列内のメンバのポインタ間の差を保持するために必要な整数の方(ptrdiff_t)

int型とします。

 

(8)

レジスタ

表 4.10

レジスタの仕様

 

項目

コンパイラの仕様

1

レジスタに割り付けることができる変数の型

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

(9)

クラス、構造体、共用体、列挙型、ビットフィールド

表 4.11

クラス、構造体、共用体、列挙型、ビットフィールドの仕様

 

項目

コンパイラの仕様

1

異なる型のメンバでアクセスされる共用体型のメンバ参照

共用体オブジェクトのメンバを異なる型のメンバを用いてアクセスする場合、データの内部表現はアクセスする型に従います。

2

クラス・構造体メンバのアライメント

クラス・構造体メンバ中のアライメント数の最大値がそのクラス・構造体のアライメント数になります。「4.1.4 データの内部表現と領域」の「(2) 構造体/共用体(C言語)、クラス型(C++言語)」を参照してください。

3

単なるint型のビットフィールドの符号

符号を明示せずに宣言されたビット・フィールドは、符号無しとなります。

4

int型のサイズ内のビットフィールドの割り付け順序

最初に宣言されたビット・フィールドは、ビット・フィールド宣言時の型のサイズの領域の最下位ビットから割り当てられます。ただし、オプションにより変更可能です。*1

5

int型のサイズ内にビットフィールドが割り付けられているとき、次に割り付けるビットフィールドのサイズがint型内の残っているサイズを超えたときの割り付け方

次のint型の領域に割り付けます。*1

6

ビットフィールドで許される型指定子

signed char、unsigned char、bool、_Bool、short、unsigned short、int、unsigned int、long、unsigned long、enum、long long、unsigned long long、wchar_t

7

列挙型の値を表現する整数型

列挙型の内部表現は、signed long型の内部表現と同じです。領域の左端のビットは、符号ビットとなります。

auto_enum オプションを指定した場合、列挙値が収まる最小の型となります。

注 1.

ビットフィールドの割り付け方の詳細については、「4.1.4 データの内部表現と領域」を参照してください。

 

(10)

型修飾子

表 4.12

型修飾子の仕様

 

項目

コンパイラの仕様

1

volatile修飾したデータへのアクセスの種類

規定しません。

 

(11)

宣言

表 4.13

宣言の仕様

 

項目

コンパイラの仕様

1

基本型(算術型、構造体型、共用体型)を修飾する宣言子の数

128個まで指定できます。

 

基本型を修飾する型の数の数え方を、以下に例を用いて示します。

(i) int a; aはint型(基本型)であり、基本型を修飾する型の数は0個です。

(ii) char *f(); fはchar型(基本型)へのポインタ型を返す関数型であり、基本型を修飾する型の数は2個です。

 

(12)

表 4.14

文の仕様

 

項目

コンパイラの仕様

1

一つのswitch文中で指定できるcaseラベルの数

制限はありません。

 

(13)

プリプロセッサ

表 4.15

プリプロセッサの仕様

 

項目

コンパイラの仕様

1

条件コンパイルの定数式内の単一文字の文字定数と実行文字集合の対応

プリプロセッサ文の文字定数と実行文字集合は一致します。また、単一文字の文字定数は、負の値を持ちません。

2

インクルードファイルの読み込み方法

絶対パスで指定したファイル名の場合はそのパスが示すディレクトリから、それ以外の場合はソース・ファイルがあるディレクトリからそれぞれヘッダ・ファイルを検索します。次に、指定したディレクトリ(-includeオプション)、最後に標準インクルード・ファイル・ディレクトリ(環境変数INC_RX 指定ディレクトリ)を検索します。

3

二重引用符で囲まれたインクルードファイルのサポートの有無

#includeを記述したファイルの格納フォルダからインクルードファイルを読み込みます。ファイルが見つからない場合、本表2項の方法に従います。

4

ソースファイルの文字の並びの対応

<と>、””で囲まれた前処理字句列は、そのままヘッダ名として扱います。マクロが展開され<文字列>、”文字列”の形式になった場合は、その内容をヘッダ名として扱います。

5

#pragmaの動作

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

6

__DATE__、__TIME__の値

コンパイル開始時のホストマシンのタイマに基づく値が設定されます。

 

(14)

ライブラリ関数

表 4.16

ライブラリ関数の仕様

 

項目

コンパイラの仕様

1

マクロNULLの値

0とします。

2

assert関数によって表示される診断メッセージ及びassert関数の終了時の動作

コンパイル時のlangオプションにより表示は変化します。

(1) -lang=c99がないとき(C(C89)、C++、EC++ 言語の場合):

ASSERTION FAILED:△式△FILE△<ファイル名>,LINE△<行番号>

(2) -lang=c99があるとき(C(C99) 言語の場合):

ASSERTION FAILED:△式△FILE△<ファイル名>,LINE△<行番号>△FUNCNAME△<関数名>

assert関数終了時の動作は規定しません。低水準インターフェースルーチンの仕様によります。

3

isalnum関数、isalpha関数、iscntrl関数、islower関数、isprint関数およびisupper関数によってテストされる文字集合

unsigned char型(0〜255)およびEOF(-1)です。判定の結果、真になる文字を表 7.7に示します。

4

数学関数の入力実引数が範囲を超えたときの数学関数が返す値

非数を返します。非数の形式は「4.1.4 データの内部表現と領域」の「(5) 浮動小数点型の仕様」を参照してください。

5

数学関数でアンダフローエラーが発生したときマクロ「ERANGE」の値が「errno」に設定されるかどうか

errnoにERANGEを設定する関数については、「10.5.6 C標準ライブラリ関数のエラーメッセージ」を参照してください。それ以外は設定しません。

6

fmod関数で第2実引数の値が0の場合、範囲エラーとなるかどうか

範囲エラーとなります。

fmodの戻り値の詳細は、「7.4.7 <math.h>」の「fmod/ fmodf/ fmodl」を参照してください。

7

signal関数に対するシグナルの集合

signal関数をサポートしていません。

8

signal関数によって認識されるシグナルの意味

signal関数をサポートしていません。

9

signal関数によって認識されるシグナルに対する規定の処理およびプログラム開始時の処理

signal関数をサポートしていません。

10

シグナル処理ルーチンの呼び出し前に signal( sig, SIG_DFL ); と同等のことが実行されない場合のシグナルの遮断の処置

signal関数をサポートしていません。

11

シグナル関数によって指定された処理ルーチンによってSIGILLシグナルが受け付けられる場合に規定の処理が再設定されるか否か

signal関数をサポートしていません。

12

入力テキストの最終の行が終了を示す改行文字を必要とするかどうか

規定しません。低水準インタフェースルーチンの仕様によります。

13

改行文字の直前に書き出された空白文字は、読み込み時に読み込まれるかどうか

規定しません。低水準インタフェースルーチンの仕様によります。

14

バイナリファイルに書かれたデータに付加されるヌル文字の数

規定しません。低水準インタフェースルーチンの仕様によります。

15

追加モード時のファイル位置指定子の初期値

規定しません。低水準インタフェースルーチンの仕様によります。

16

テキストファイルへの出力によってそれ以降のファイルのデータが失われるかどうか

規定しません。低水準インタフェースルーチンの仕様によります。

17

ファイルバッファリングの仕様

規定しません。低水準インタフェースルーチンの仕様によります。

18

長さ0のファイルが存在するかどうか

規定しません。低水準インタフェースルーチンの仕様によります。

19

正当なファイル名の構成規則

規定しません。低水準インタフェースルーチンの仕様によります。

20

同時に同じファイルをオープンできるかどうか

規定しません。低水準インタフェースルーチンの仕様によります。

21

オープンされているファイルに対するremove関数の効果

remove関数をサポートしていません。

22

rename関数呼出し前に新しい名前を持つファイルが存在している場合の効果

rename関数をサポートしていません。

23

fprintf関数における%p書式変換の出力形式

16進数出力となります

24

fscanf関数における%p書式変換の入力形式

16進数入力となります。

25

fscanf関数での変換文字「-」の意味

先頭、最後あるいは「^」の直後でない場合、直前の文字と直後の範囲を示します。

26

fgetpos,ftell関数で設定されるerrnoの値

fgetpos関数はサポートしていません。ftell関数については規定しません。低水準インタフェースルーチンの仕様によります。

27

perror関数が生成するメッセージ出力形式

メッセージの出力形式を(a)に示します。

28

calloc,malloc,realloc関数でサイズが0のときの動作

NULLを返します。

29

オープンされているファイルおよび一時ファイルに関してのabort関数の動作

規定しません。低水準インタフェースルーチンの仕様によります。

30

exit関数の実引数の値が0、EXIT_SUCCESSまたはEXIT_FAILURE以外の場合に返される状態

exit関数をサポートしていません。

31

getenv関数によって使われる環境の名前の集合および環境の並びを変更する方法

getenv関数をサポートしていません。

32

system関数による文字列の実行モードおよび内容

system関数をサポートしていません。

33

strerror関数によって返されるエラーメッセージ文字列の内容

処理系定義の対応関係にしたがって、エラー番号errnumを文字列に変換します。errnumの値は、通常、グローバル変数errnoがコピーされたものです。

詳細は「10.5.6 C標準ライブラリ関数のエラーメッセージ」を参照してください。

34

地方時および夏時間

time.hをサポートしていません。

35

clock 関数のための時点

clock関数をサポートしていません。