Everything
4.1.1 C90の処理系定義

この項では,C90規格における処理系定義について説明します。

(1)

どのような方法で診断メッセージを識別するか。(5.1.1.3)

10. メッセージ」を参照してください。

(2)

main関数への実引数の意味。(5.1.2.2.1)

フリースタンディング環境であるため,規定しません。

(3)

対話型装置がどのようなもので構成されるか。(5.1.2.3)

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

(4)

外部給合でない識別子において(31以上の)意味がある先頭の文字数。(6.1.2)

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

(5)

外部結合である識別子において(6以上の)意味がある先頭の文字数。(6.1.2)

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

(6)

外部結合である識別子において英小文字と英大文字の区別に意味があるか否か。(6.1.2)

識別子内の英小文字と英大文字を区別します。

(7)

ソース及び実行文字集合の要素で,この規格で明示的に規定しているもの以外の要素。(5.2.1)

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

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

(8)

多バイト文字のコード化のために使用されるシフト状態。(5.2.1.2)

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

(9)

実行文字集合の文字におけるビット数。(5.2.4.2.1)

8ビットとします。

(10)

(文字定数内及び文字列リテラル内の)ソース文字集合の要素と実行文字集合の要素との対応付け。(6.1.3.4)

同一の値をもつ要素へ対応付けます。

(11)

基本実行文字集合で表現できない文字若しくは拡張表記を含む単純文字定数の値,又はワイド文字定数に対しては拡張文字集合で表現できない文字若しくは拡張表記を含むワイド文字定数の値。(6.1.3.4)

特定の非図形文字は,\に続く英小文字から構成する拡張表記\a,\b,\f,\n,\r,\t,および\vによって表現できます。その他の拡張表記はもたず,\に続く文字は,その文字自身とします。

拡張表記

値(ASCII)

\a

0x07

\b

0x08

\f

0x0C

\n

0x0A

\r

0x0D

\t

0x09

\v

0x0B

(12)

2文字以上の文字を含む単純文字定数又は2文字以上の多バイト文字を含むワイド文字定数の値。(6.1.3.4)

2文字までの文字を含む単純文字定数は,末尾の文字を下位バイト,先頭の文字を上位バイトに持つ2バイトの値を持ちます。3文字以上の文字を持つ文字定数はエラーとなります。基本的な実行環境文字集合で表現されない文字は,その値を持つ単純文字定数とみなします。不正な逆斜線表記は逆斜線を無視して次の文字を単純文字定数とみなします。

(13)

ワイド文字定数に対して,多バイト文字を対応するワイド文字(コード)に変換するために使用されるロケール。(6.1.3.4)

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

(14)

"単なる"charがsigned charと同じ値の範囲をもつか,unsigned charと同じ値の範囲をもつか。(6.2.1.1)

char型は,unsigned char型と同じ値の範囲,同じ表現形式,同じ動作を持ちます。ただし,オプション-signed_charでsigned char型に切り替えが可能です。

(15)

整数の様々な型の表現方法及び値の集合。(6.1.2.5)

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

(16)

整数をより短い符号付き整数に変換した結果,又は符号無し整数を長さの等しい符号付き整数に変換した結果で,値が表現できない場合の変換結果。(6.2.1.2)

変換先の型の幅でマスクした(上位ビットを切り捨てた)ビット列とします。

(17)

符号付き整数に対してビット単位の演算を行った結果。(6.3)

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

(18)

整数除算における剰余の符号。(6.3.5)

"%"演算子の結果の符号は第1オペランドの符号とします。

(19)

負の値をもつ符号付き汎整数型の右シフトの結果。(6.3.7)

算術シフトを行います。

(20)

浮動小数点数の様々な型の表現方法及び値の集合。(6.1.2.5)

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

(21)

汎整数の値を元の値に正確に表現することができない浮動小数点数に変換する場合の切捨ての方向。(6.2.1.3)

表現しうる最も近い方向に丸められます。

(22)

浮動小数点数をより狭い浮動小数点数に変換する場合の切捨て又は丸めの方向。(6.2.1.4)

表現しうる最も近い方向に丸められます。

(23)

配列の大きさの最大値を保持するために必要な整数の型。すなわちsizeof演算子の型size_t。(6.3.3.4,7.1.1)

unsigned int型です。

(24)

ポインタを整数へキャストした結果,及びその逆の場合の結果。(6.3.4)

4.2.6 拡張言語仕様の使用方法」にある「メモリ配置領域指定(__near/__far)」を参照してください。

(25)

同じ配列内の,二つの要素へのポインタ間の差を保持するために必要な整数の型,すなわちptrdiff_tの型。(6.3.4,7.1.1)

signed int型です。

(26)

register記憶域クラス指定子を使用することによって実際にオブジェクトをレジスタに置くことができる範囲。(6.5.1)

register指定子を無視して最適化します。

(27)

共用体オブジェクトのメンバを異なる型のメンバを用いてアクセスする場合。(6.3.2.3)

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

(28)

構造体のメンバの詰め物及び境界調整。(6.5.2.1)

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

(29)

"単なる"int型のビットフィールドが,signed intのビットフィールドとして扱われるか,unsigned intのビットフィールドとして扱われるか。(6.5.2.1)

unsigned int型として扱います。ただし,オプション-signed_bitfieldにより変更可能です。

(30)

単位内のビットフィールドの割付け順序。(6.5.2.1)

下位から割り付けます。

(31)

ビットフィールドを記憶域単位の境界にまたがって割り付けうるか否か。(6.5.2.1)

構造体パッキング未指定時は,ビットフィールドは境界を跨がず,次の領域に割り付けます。構造体パッキング指定時は,ビットフィールドは境界を跨ぐことがあります。

(32)

列挙型の値を表現するために選択される整数型。(6.5.2.2)

char,signed char,unsigned char,signed short型のいずれかです。列挙値が収まる最小の型となります。

(33)

volatile修飾型のオブジェクトへのアクセスをどのように構成するか。(6.5.3)

アクセス幅,アクセス順序,アクセス回数はCソース上の記述通りに実施しますが,対応するマイコンの命令がない型へのアクセスは,その限りではありません。

(34)

算術型,構造体型又は共用体型を修飾する宣言子の最大数。(6.5.4)

128です。

(35)

switch文におけるcase値の最大数。(6.6.4.2)

65535です。

(36)

条件付き取込みを制御する定数式中の単一文字からなる文字定数の値が実行文字集合中の同じ文字定数の値に一致するか否か。このような文字定数が負の値をもつことがあるか否か。(6.8.1)

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

単なるchar型(signedもunsignedもつかないchar)がunsignedの場合は,負の値を持ちません。signedの場合は,負の値を持つことがあります。

(37)

取込み可能なソース・ファイルを捜すための方法。(6.8.2)

次の順序で探索し,フォルダにある同名ファイルをヘッダと識別します。

(1) フルパス指定の場合はそのパスが示すフォルダ

(2) オプション-Iで指定されたフォルダ

(3) 標準インクルードファイルフォルダ(コンパイラが置かれたbinフォルダからの相対パスでの..\incフォルダ)

(38)

取込み可能なソース・ファイルに対する"で囲まれた名前の探索。(6.8.2)

次の順序で探索します。

(1) フルパス指定の場合はそのパスが示すフォルダ

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

(3) オプション-Iで指定されたフォルダ

(4) 標準インクルードファイルフォルダ(コンパイラが置かれたbinフォルダからの相対パスでの..\incフォルダ)

(39)

ソース・ファイル名と文字列との対応付け。(6.8.2)

#includeに記述された文字列は,ソース文字集合として指定した文字コードとして解釈され,ヘッダ名または外部ソース・ファイル名に対応付けられます。

(40)

認識される#pragma指令の動作。(6.8.6)

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

(41)

翻訳日付及び翻訳時刻がそれぞれ有効でない場合における__DATE__及び__TIME__の定義。(6.8.8)

日付や時刻が得られない場合はありません。

(42)

マクロNULLが展開する空ポインタ定数。(7.1.6)

(void*)0とします。

(43)

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

以下の通りです。

Assertion failed : , file ファイル名, line 行番号

終了時の動作は,abort関数の実装に依存します。

(44)

isalnum関数,isalpha関数,iscntrl関数,islower関数,isprint関数及びisupper関数によってテストされる文字集合。(7.3.1)

unsigned char型(0~255)およびEOF(-1)です。

(45)

数学関数に定義域エラーが発生した場合に返される値。(7.5.1)

7.5 ライブラリ関数」を参照してください。

(46)

アンダフロー値域エラーの場合に,数学関数がマクロERANGEの値を整数式errnoに設定するか否か。(7.5.1)

アンダーフロー発生時はerrnoにERANGEを設定します。

(47)

fmod関数の第2引数が0の場合に,定義域エラーが発生するか又は0が返されるか。(7.5.6.4)

定義域エラーが発生します。詳細はfmod関数群の説明を参照してください。

(48)

signal関数に対するシグナルの集合。(7.7.1.1)

シグナル操作関数はサポートしていません。

(49)

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

シグナル操作関数はサポートしていません。

(50)

signal関数によって認識されるシグナルに対する既定の処理及びプログラム開始時の処理。(7.7.1.1)

シグナル操作関数はサポートしていません。

(51)

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

シグナル操作関数はサポートしていません。

(52)

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

シグナル操作関数はサポートしていません。

(53)

テキストストリームの最終行が,終了を示す改行文字を必要とするか否か。(7.9.2)

改行文字を必要としません。

(54)

データが読み取られる時,改行文字の直前にテキストストリームに書き込まれた空白文字の並びが現れるか否か。(7.9.2)

データが読み取られる時に現れます。

(55)

バイナリストリームに書き込むデータに付加してもよいナル文字の個数。(7.9.2)

0個です。

(56)

追加モードのストリームのファイル位置表示子が,最初にファイルの先頭又は終わりのどちらに位置付けされるか。(7.9.3)

ファイル操作関数はサポートしていません。

(57)

テキストストリームへの書込みが,結び付けられたファイルを最終書込み点の直後で切り捨てるか否か。(7.9.3)

ファイル操作関数はサポートしていません。

(58)

ファイルバッファリングの特性。(7.9.3)

ファイル操作関数はサポートしていません。

(59)

長さ0のファイルが実際に存在するか否か。(7.9.3)

ファイル操作関数はサポートしていません。

(60)

正しいファイル名の規則。(7.9.3)

ファイル操作関数はサポートしていません。

(61)

同一ファイルを複数回オープンすることが可能か否か。(7.9.3)

ファイル操作関数はサポートしていません。

(62)

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

ファイル操作関数はサポートしていません。

(63)

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

ファイル操作関数はサポートしていません。

(64)

fprintf関数中の%p変換による出力。(7.9.6.1)

16進表記です。

fprintf関数はサポートしていません。

(65)

fscanf関数中の%p変換に対する入力。(7.9.6.2)

16進整数です。

fscanf関数はサポートしていません。

(66)

fscanf関数中の%[変換において文字-が走査文字の並び中の最初の文字でも最後の文字でもない場合の解釈。(7.9.6.2)

7.5.7 標準入出力関数」にある「scanf」を参照してください。

fscanf関数はサポートしていません。

(67)

fgetpos関数又はftell関数が失敗した場合に,マクロerrnoに設定される値。(7.9.9.1,7.9.9.4)

ファイル操作関数はサポートしていません。

(68)

perror関数によって生成されるメッセージ。(7.9.10.4)

7.5 ライブラリ関数」を参照してください。

(69)

要求された大きさが0の場合のcalloc関数,malloc関数又はrealloc関数の動作。(7.10.3)

NULLを返します。

(70)

オープンされているファイル及び一時ファイルに関してのabort関数の動作。(7.10.4.1)

ファイル操作関数はサポートしていません。

(71)

exit関数の実引数の値が0,EXIT_SUCCESS又はEXIT_FAILURE以外の場合に返される状態。(7.10.4.3)

フリースタンディング環境であるため,規定しません。

(72)

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

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

(73)

system関数による文字列の実行のモード及び内容。(7.10.4.5)

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

(74)

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

7.5 ライブラリ関数」を参照してください。

(75)

地方時及び夏時間。(7.12.1)

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

(76)

clock関数のための時点。(7.12.2.1)

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

翻訳限界

CC-RLの翻訳限界を以下に示します。

「制限なし」の項目は,上限はホスト環境のメモリ状況に依存します。

表 4.1

翻訳限界(C90)

項目

C90

CC-RL

条件付き取込みにおける入れ子のレベル数

8

制限なし

一つの宣言中の一つの算術型,構造体型,共用体型又は不完全型を修飾するポインタ,配列及び関数宣言子(の任意の組合せ)の個数

12

128

一つの完全宣言子における括弧で囲まれた宣言子の入れ子のレベル数

31

制限なし

一つの完全式における括弧で囲まれた式の入れ子のレベル数

32

制限なし

内部識別子又はマクロ名において意味がある先頭の文字数

31

制限なし

外部識別子において意味がある先頭の文字数

6

制限なし

一つの翻訳単位中における外部識別子数

511

制限なし

一つのブロック中におけるブロック有効範囲をもつ識別子数

127

制限なし

一つの翻訳単位中で同時に定義されうるマクロ識別子数

1024

制限なし

一つの関数定義における仮引数の個数

31

制限なし

一つの関数呼出しにおける実引数の個数

31

制限なし

一つのマクロ定義における仮引数の個数

31

制限なし

一つのマクロ呼出しにおける実引数の個数

31

制限なし

一つの論理ソース行における文字数

509

制限なし

(連結後の)単純文字列リテラル又はワイド文字列リテラル中における文字数

509

制限なし

(ホスト環境の場合)一つのオブジェクトのバイト数

32767

32767(65535)注1

#includeで取り込まれるファイルの入れ子のレベル数

8

制限なし

一つのswitch文(入れ子になったswitch文を除く)中におけるcase名札の個数

257

65535

一つの構造体又は共用体のメンバ数

127

制限なし

一つの列挙体における列挙定数の個数

127

制限なし

一つのメンバ宣言並びにおける構造体又は共用体定義の入れ子のレベル数

15

制限なし

注 1.

カッコ内は-large_variable指定時