C ユーザーズガイド |
付録 B
処理系定義の動作
『情報システム用米国規格プログラミング言語 C (ANSI ISO/IEC 9899:19901)』には、C 言語で記述されたプログラムの構文と解釈が規定されています。
この付録では、それらの動作を詳しく説明します。各項は ISO/IEC 9899:1990 規格 そのものと簡単に比較できるようになっています。
- 「翻訳 (G.3.1)」
- 「環境 (G.3.2)」
- 「識別子 (G.3.3)」
- 「文字 (G.3.4)」
- 「整数 (G.3.5)」
- 「浮動小数点 (G.3.6)」
- 「配列とポインタ (G.3.7)」
- 「レジスタ (G.3.8)」
- 「構造体、共用体、列挙型、およびビットフィールド (G.3.9)」
- 「修飾子 (G.3.10)」
- 「宣言子 (G.3.11)」
- 「文 (G.3.12)」
- 「プリプロセッサ指令 (G.3.13)」
- 「ライブラリ関数 (G.3.14)」
- 「プリプロセッサ指令 (G.3.13)」
ANSI/ISO 規格との実装の比較
翻訳 (G.3.1)
括弧内の数は、ISO/IEC 9899/1990 規格の節番号に対応しています。
- ファイル名、
line
行番号:メッセージ
- ファイル名、
line
行番号:警告メッセージ環境 (G.3.2)
(5.1.2.2.1)
main
の引数の意味
int main (int argc, char *argv[ ]){....}
argc
はプログラムの呼び出しに伴うコマンド行引数の数です。シェルによって展開された後は、argc
は必ず 1 以上、つまりプログラム名が 1 つ以上になります。(5.1.2.3) 対話型デバイスを構成するもの
対話型デバイスにはシステムライブラリコールの
isatty()
が 0 以外の値を返します。識別子 (G.3.3)
(6.1.2) 外部リンケージのない識別子の先頭から (31 を越える) 有意文字の数
最初の 1,023 文字が有意です。識別子は大文字と小文字を別の文字として扱います。
(6.1.2) 外部リンケージのある識別子の先頭から (6 を越える) 有意文字の数
最初の 1,023 文字が有意です。識別子は大文字と小文字を別の文字として扱います。
文字 (G.3.4)
(5.2.1) ソースと実行の文字セットについて (規格に明確に規定されているものを除く)
どちらの文字セットも ASCII 文字セットやロケール固有の拡張文字と同一です。
(5.2.1.2) 複数バイト文字を符号化するためのシフト状態について
(5.2.4.2.1) 実行文字セットで 1 文字のビット数
ASCII 部分では、1 文字に 8 ビットです。ロケール固有の拡張文字部分では、ロケール固有の 8 ビットの倍数です。
(6.1.3.4) ソース文字セット (文字と文字列リテラル) メンバーの実行文字セットメンバーへの配置
ASCII 部分では、配置はソース文字と実行文字と同様です。
(6.1.3.4) 基本の実行文字セット、またはワイド文字定数用の拡張文字セットのどちらにも表現されていない文字や、エスケープシーケンスを含む整数文字定数の値
右端の文字が示す数値です。たとえば、
'\q'
は'q'
に等しくなります。このようなエスケープシーケンスが発生すると警告が発行されます。(6.1.3.4) 2 つ以上の文字を含む整数文字定数の値、または 2 つ以上の複数バイト文字を含むワイド文字定数の値
エスケープシーケンスの発生しない複数バイト文字セットの値は、各文字の示す数値から派生しています。
(6.1.3.4) 複数バイト文字を対応するワイド文字 (コード) に変換するのに使用される現ロケール (locale)
有効なロケールは
LC_ALL、LC_CTYPE、LANG
環境変数のいずれかで指定されたものです。(6.2.1.1.) 何もついていない
char
は、signed char
と、unsigned char
のどちらと同じ範囲の値を持つか
char
は、signed char
とみなされます (SPARC) (x86)。整数 (G.3.5)
表 B-1 整数の表現と値 (1/2) char
(SPARC) (x86)signed char
unsigned char short signed short unsigned short int signed int unsigned int long (SPARC) v8long
(SPARC) v9 signed long
(SPARC) v8signed
long
(SPARC) v9 unsigned long (SPARC) v8unsigned
long
(SPARC) v9 long long1 signed long long1 unsigned long long1
1 -Xc モードでは無効です。
(6.2.1.2) 値を表現できない場合に整数をより短い符号付き整数に変換した結果、また符号なしの整数を同じ長さの符号付き整数に変換した結果
整数がより短い符号付き整数に変換される場合は、長い方の整数の下位ビットが短い方の符号付き整数に複写されます。結果は負になることがあります。
符号なし整数が同サイズの符号付き整数に変換される場合は、符号なし整数の下位ビットが符号付き整数に複写されます。結果は負になることがあります。
(6.3) 符号付き整数におけるビット単位演算の結果
ビット単位演算を符号付きの型に適用すると、符号ビットを含むオペランドのビット単位演算となります。その結果の各ビットは、両オペランドの対応するビットが設定されていた場合にのみ設定されます。
(6.3.5) 整数の除算における剰余の符号について
結果は被除数と同じ符号になります。たとえば、-23/4 の剰余は -3 となります。
(6.3.7) 負の値を持つ符号付き整数型を右シフトした結果
浮動小数点 (G.3.6)
(6.1.2.5) 浮動小数点数の型の表現と値
表 B-2 浮動小数点数の値 float
ビット数 32 最小値 1.17549435E-38 最大値 3.40282347E+38 イプシロン 1.19209290E-07
表 B-3 double
の値double
ビット数 64 最小値 2.2250738585072014E-308 最大値 1.7976931348623157E+308 イプシロン 2.2204460492503131E-16
(6.2.1.3) 整数値が元の値を完全には表現できない浮動小数点数に変換された場合の切り捨ての指示
(6.2.1.4) 浮動小数点数が短い浮動小数点数に変換された場合の切り捨てまたは丸めの指示
配列とポインタ (G.3.7)
(6.3.3.4、7.1.1) 配列の最大サイズを維持するのに必要な整数型。すなわち、
sizeof
演算子のsize_t
の型
stddef.h
において定義されているunsigned int
です。
-Xarch=v9
では、unsigned long
です。(6.3.4) ポインタを整数に cast で型変換した結果、またはその逆の結果
ポインタおよび
int、long、unsigned int、unsigned long
型の値ではビットパターンは変わりません。(6.3.6、7.1.1) 同じ配列のメンバーへの 2 つのポインタの相違
ptrdiff_t
を維持するのに必要な整数型レジスタ (G.3.8)
(6.5.1)
register
記憶クラス指定子を使用して、オブジェクトを実際に入れることのできるレジスタの数有効なレジスタ宣言の数は使用パターンおよび各関数における定義に依存し、割り当て可能なレジスタ数に制限されます。コンパイラやオプティマイザは、レジスタ宣言に従う必要はありません。
構造体、共用体、列挙型、およびビットフィールド (G.3.9)
(6.3.2.3) 共用体のオブジェクトのメンバーは他の型のメンバーを使用してアクセスされる。
共用体のメンバーに記憶されているビットパターンがアクセスされ、アクセスしたメンバーの型に従って値が解釈されます。
(6.5.2.1) 構造体のメンバーのパディングと整列条件
表 B-5 構造体メンバーのパディングと整列 charバイト shortハーフワード intワード long (SPARC) v8ワード long (SPARC) v9ダブルワード 8 float (SPARC)ワード double (SPARC)ダブルワード (SPARC)
ワード (x86) long double (SPARC) v8ダブルワード (SPARC) ワード (x86) long double (SPARC) v9 クワドワード 16 pointer (SPARC) v8ワード pointer (SPARC) v9クワドワード 8 long long1ダブルワード (SPARC) ワード (x86)
1 -Xc モードでは無効です。
各要素が適切な境界上に並ぶように、構造体のメンバーが自動的に埋め込まれます。
構造体自身の整列条件はそのメンバーの整列条件と同一です。たとえば、
char
型だけのstruct
は整列の制限はありませんが、double
型を含むstruct
は 8 バイトの境界上に並びます。(6.5.2.1) 単なる
int
のビットフィールドはsigned int
ビットフィールドとみなされるか、unsigned int
ビットフィールドとみなされるか。(6.5.2.1)
int
内のビットフィールドの割り当て順序ビットフィールドは、記憶装置内で高位から低位の順に割り当てられます。
(6.5.2.1) ビットフィールドは記憶装置の境界を越えることができるか。
(6.5.2.2) 列挙型の値を表現するための整数型
修飾子 (G.3.10)
(6.5.5.3)
volatile
修飾子型を持つオブジェクトへのアクセス方法オブジェクト名を参照するたびに、そのオブジェクトへアクセスされます。
宣言子 (G.3.11)
(6.5.4) 算術演算、構造体、または共用体の型が修正可能な宣言子の最大数
文 (G.3.12)
(6.6.4.2)
switch
文中のcase
値の最大個数プリプロセッサ指令 (G.3.13)
(6.8.1) 条件付きのインクルードを制御する定数式のシングルキャラクタ文字定数の値は、実行文字セット中の同一の文字定数の値に一致するか。
前処理命令内の文字定数は他の式のものと同一の数値を持ちます。
(6.8.1) そのような文字定数は負の値をとり得るか。
この場合の文字定数は負の値を取ることがあります (SPARC) (x86)。
(6.8.2) インクルード可能なソースファイルの位置を知る方法
最初に、ファイル名が
<
>
によって区切られたファイルを、-I
オプションによって指定されたディレクトリの中で検索します。次に、標準ディレクトリの中を検索します。異なるデフォルト位置を指定するのに-YI
オプションが使用されていない限り、標準ディレクトリは/usr/include
です。最初に、ファイル名が引用符によって区切られたファイルを、
#include
文のあるソースファイルのディレクトリ中で検索します。次に、-I
オプションによって指定されたディレクトリの中を検索し、最後に標準ディレクトリの中を検索します。
<
>
や二重引用符で囲まれたファイル名が'/'
で始まっている場合は、そのファイル名はルートディレクトリで始まるパス名であると解釈されます。このファイルの検索はルートディレクトリの中においてのみ開始されます。(6.8.2) インクルード可能なソースファイルの引用符付きの名前のサポート
インクルード命令の引用符付きのファイル名はサポートされます。
(6.8.2) ソースファイルの文字シーケンスの配置
ソースファイルの文字は対応する ASCII の値に配置されます。
(6.8.6) 認識された
#pragma
命令の動作次に示すプラグマがサポートされています。詳細は、「プラグマ」を参照してください。
align
<整数>(<変数>
[,
<変数>]
)does_not_read_global_data
(<関数>[,<
関数>]
)does_not_return
(<関数>[,
<関数>]
)does_not_write_global_data
(<関数>[,
<関数>]
)error_messages
(on|off|default,
<タグ>...
<タグ>)fini
(<関数 1>[,
<関数 2>...,
<関数 n>]
)ident
(<文字列>)init
(<関数 1>[,
<関数 2>...,
<関数 n>]
)inline
(<関数>[,
<関数>]
)int_to_unsigned
(<関数>)MP serial_loop
MP serial_loop_nested
MP taskloop
no_inline
(<関数>[,
<関数>]
)nomemorydepend
no_side_effect
(<関数>[,
<関数>]
)opt_level
(<関数>[,
<関数>]
)pack
(n)pipeloop
(n)rarely_called
(<関数>[,
<関数>]
)redefine_extname
<旧外部参照名> <新外部参照名>returns_new_memory
(<関数>[,
<関数>]
)unknown_control_flow
(<名前>[,
<名前>]...
)unroll
(<展開関数>)weak
(<シンボル 1>[=
< シンボル 2>]
)(6.8.8) 翻訳の日付と時間がわからないときの
__DATE__
と__TIME__
の定義ライブラリ関数 (G.3.14)
(7.1.6) マクロの null を拡張した null ポインタ定数
(7.2)
assert
関数によって出力される診断とassert
関数の終了動作Assertion failed: <文>. file <ファイル名>, line <番号>(7.3.1)
isalnum、isalpha、iscntrl、islower、isprint、および
isupper
関数によってテストされる文字セット
(7.5.1) ドメインエラーの数値演算関数によって返される値
(7.5.1) アンダーフローエラーの場合に、数値演算関数が整数式
errno
をマクロERANGE
の値に設定するかどうか。アンダーフローが検出された場合、
scalbn
を除いた数値演算関数はerrno
をERANGE
に設定します。(7.5.6.4)
fmod
関数の第 2 引数が 0 を持つ場合に、ドメインエラーとなるか、0 が返されるか。(7.7.1.1)
signal
関数に対するシグナルの設定表 B-8 に
signal
関数が認識する各シグナルの意味を示します。
(7.7.1.1)
singal
関数によって認識される各signal
のデフォルトの取扱い、およびプログラムのスタートアップ時における取扱い(7.7.1.1) シグナルハンドラを呼び出す前に
signal(sig、SIG_DFL);
相当のものが実行されない場合は、どのシグナルがブロックされるのか。
signal(sig、SIG_DFL);
相当のものは、常に実行されます。(7.7.1.1) `
signal
' 関数に指定されたハンドラによりSIGILL
シグナルが受信された場合は、デフォルト処理はリセットされるか。(7.9.2) テキストストリームの最終行で、改行文字による終了を必要とするか。
(7.9.2) 改行文字の直前でテキストストリームに書き出されたスペース文字は読み込みの際に表示されるか。
ストリームが読み込まれるときにはすべての文字が表示されます。
(7.9.2) バイナリストリームに書かれたデータに追加することのできる
null
文字の数(7.9.3) アペンドモードのストリームのファイル位置指示子は、最初にファイルの始まりと終わりのどちらに置かれるか。
(7.9.3) テキストストリームへの書き込みを行うと、書き込み点以降の関連ファイルが切り捨てられるか。
ハードウェアの命令がない限り、テキストストリームへの書き込みによって書き込み点以降の関連ファイルが切り捨てられることはありません。
(7.9.3) ファイルのバッファリングの特徴
標準エラーストリーム (
stderr
) を除く出力ストリームは、デフォルトでは出力がファイルの場合にはバッファリングされ、出力が端末の場合にはラインバッファリングされます。標準エラー出力ストリーム (stderr
) はデフォルトではバッファリングされません。バッファリングされた出力ストリームは多くの文字を保存し、その文字をブロックとして書き込みます。バッファリングされなかった出力ストリームは宛先ファイルあるいは端末に迅速に書き込めるように情報の待ち行列を作ります。ラインバッファリングされた出力は、その行が完了するまで (改行文字が要求されるまで) 出力の各行の待ち行列を作ります。
(7.9.3) ゼロ長ファイルは実際に存在するか。
ディレクトリエントリを持つという意味ではゼロ長ファイルは存在します。
(7.9.3) 有効なファイル名を作成するための規則
有効なファイル名は 1 から 1,023
文字までの長さで、NULL
文字とスラッシュ (/
) 以外のすべての文字を使用することができます。(7.9.3) 同一のファイルを何回も開くことができるか。
(7.9.4.1) 開いたファイルへの
remove
関数の効果ファイルを閉じる最後の呼び出しによりファイルが削除されます。すでに除去されたファイルをプログラムが開くことはできません。
(7.9.4.2)
rename
関数を呼び出す前に新しい名前を持つファイルがあった場合、そのファイルはどうなるか。そのようなファイルがあれば削除され、新しいファイルが元のファイルの上に書き込まれます。
(7.9.6.1)
fprintf
関数における%p
変換の出力(7.9.6.2)
fscanf
関数における%p
変換の入力(7.9.6.2)
fscanf
関数における%[
変換のための走査リストで最初の文字でも最後の文字でもないハイフン文字 '-
' の解釈'
-
' 文字は包含的範囲を意味します。すなわち、[0-9]
は[0123456789]
に等しくなります。ロケール固有の動作 (G.4)
(7.12.1) 現地時間帯と夏時間の設定
(7.12.2.1)
clock
関数の経過時間
clock
関数の経過時間はプログラム実行開始時を原点とする時間経過として表現されます。ホスト環境については以下のようなロケール固有の性質があります。
(5.2.1) 必要なメンバー以外の実行文字セットの内容
ロケール依存です。C ロケールでは、文字セットに拡張はありません。
(5.2.2) 印刷方向
(7.1.1) 10 進小数点を表わす文字
ロケール依存です。C ロケールでは、10 進小数点はピリオド ( . ) です。
(7.3) 処理系ごとに定義される文字テストおよびケース配置関数の項目
表 B-6 を参照してください。
(7.11.4.4) 実行文字セットの照合シーケンス
ロケール依存です。C ロケールでは、照合順序は ASCII の照合シーケンスと同じです。
(7.12.3.5) 時間と日付の書式
ロケール依存です。C ロケールでの月の名前は次のとおりです。
表 B-9 月の名前 January May September February June October March July November April August December
曜日の名前は次のとおりです。
表 B-10 曜日の名前と省略名 曜日名 省略名 Sunday Thursday Sun Thu Monday Friday Mon Fri Tuesday Saturday Tue Sat Wednesday
Wed
%H:%M:%S
AM PM1 日本の対応規格は、JIS X 3010 - 1993 です。
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |
ホーム | 目次 | 前ページへ | 次ページへ | 索引 |