この規格ページの目次
- 2. 引用規格
- 3. 用語及び記号の定義
- 3.1 アクセス(access)
- 3.2 境界調整(alignment)
- 3.3 実引数[argument,actual argument,actual parameter(廃止予定)]
- 3.4 動作(behavior)
- 3.5 ビット(bit)
- 3.6 バイト(byte)
- 3.7 文字(character)
- 3.8 制約(constraint)
- 3.9 正しい丸めの結果(correctly rounded result)
- 3.10 診断メッセージ(diagnostic message)
- 3.11 前方参照(forward reference)
- 3.12 処理系(implementation)
- 3.13 処理系限界(implementation limit)
- 3.14 オブジェクト(object)
- 3.15 仮引数[parameter,formal parameter,formal argument(廃止予定)]
- 3.16 推奨実装仕様(recommended practice)
- 3.17 値(value)
- 4. 規格合致性
- 5. 環境
- 5.1 概念モデル
- JIS X 3010:2003の引用国際規格 ISO 一覧
- JIS X 3010:2003の国際規格 ICS 分類一覧
- JIS X 3010:2003の関連規格と引用規格一覧
2
X 3010 : 2003 (ISO/IEC 9899 : 1999)
− Cプログラムを解釈するための意味規則
− Cプログラムが処理する入力データの表現方法
− Cプログラムが生成する出力データの表現方法
− C言語の規格合致処理系がCプログラムに課す制約及び限界
この規格は,次の事項を規定しない。
− データ処理システムで使用するために,Cプログラムを変換する機構
− データ処理システムで使用するために,Cプログラムを呼び出す機構
− Cプログラムで使用するために,入力データを変換する機構
− Cプログラムが出力データを生成した後に,そのデータを変換する機構
− 特定のデータ処理システム又は特定の処理系において,許容範囲を超えるプログラムの大きさ又は複
雑さ及びそのデータの大きさ又は複雑さ
− 規格合致処理系を支援するためにデータ処理システムが備えるべき最小限の要求条件
備考 この規格の対応国際規格を,次に示す。
なお,対応の程度を表す記号は,ISO/IEC Guide 21に基づき,IDT(一致している),MOD
(修正している),NEQ(同等でない)とする。
ISO/IEC 9899:1999,Programming languages―C (IDT)
2. 引用規格
次に掲げる規格は,この規格に引用されることによって,この規格の規定の一部を構成す
る。これらの引用規格のうちで,発効年又は発行年を付記してあるものは,記載の年の版だけがこの規格
の規定を構成するものであって,その後の改正版・追補は適用しない。発効年又は発行年を付記していな
い引用規格は,その最新版(追補を含む。)を適用する。
JIS X 0001 : 1994 情報処理用語―基本用語
備考 ISO/IEC 2382-1:1993,Information technology―Vocabulary―Part 1: Fundamental termsが,この
規格と一致している。
JIS X 0201 7ビット及び8ビットの情報交換用符号化文字集合
備考 ISO/IEC 646,Information technology―ISO 7-bit coded character set for information interchangeか
らの引用事項は,この規格の該当事項と同等である。
JIS X 0301 日付及び時刻の表記
備考 ISO 8601,Data elements and interchange formats―Information interchange―Representation of
dates and timesが,この規格と一致している。
ISO 31-11:1992,Quantities and units―Part 11:Mathematical signs and symbols for use in the physical sciences
and technology
ISO 4217,Codes for the representation of currencies and funds
ISO/IEC 10646 (all parts),Information technology―Universal Multiple-Octet Coded Character Set (UCS)
参考 ISO/IEC 10646-1:1993は,JIS X 0221:1995 国際符号化文字集合(UCS)―第1部 : 体系及
び基本多言語面と一致している。
IEC 60559:1989,Binary floating-point arithmetic for microprocessor systems(この規格の番号は,以前IEC
559:1989であった。)
――――― [JIS X 3010 pdf 6] ―――――
3
X 3010 : 2003 (ISO/IEC 9899 : 1999)
3. 用語及び記号の定義
この規格で用いる主な用語の定義は,次による。その他の用語は,その用語を
太字で示した場所,又は構文規則の左側に出現した場所で定義したとみなす。この規格で明示的に定義す
る用語は,この規格以外で定義される類似の用語を暗黙に参照すると考えてはならない。この規格で定義
しない用語は,JIS X 0001に従って解釈する。この規格で定義しない数学記号は,ISO 31-11に従って解釈
する。
3.1 アクセス(access)
<実行時の動作>オブジェクトの値を読み取る,又は変更すること。
参考1. これらの二つの動作のうちのいずれか一方だけを意味する場合は,“読み取る”又は“変更す
る”という用語を使う。
2. “変更する”は,格納する新しい値が,格納前の値と同じである場合も含む。
3. 評価されない式は,オブジェクトをアクセスしない。
3.2 境界調整(alignment)
特定の型のオブジェクトを特定のバイトアドレスの倍数のアドレスをもつ
記憶域境界に割り付ける要求。
3.3 実引数[argument,actual argument,actual parameter(廃止予定)]
関数呼出し式において,括
弧で囲まれコンマで区切られた並びの中の式,又は関数形式マクロの呼出しにおいて,括弧で囲まれコン
マで区切られた並びの中の前処理字句の列。
3.4 動作(behavior)
外から見る様子又は動作。
3.4.1 処理系定義の動作(implementation-defined behavior) 未規定の動作のうち,各処理系が選択し
た動作を文書化するもの。
例 処理系定義の動作の例としては,符号付き整数を右シフトした場合の最上位ビットの伝ぱ(播)
法がある。
3.4.2 文化圏固有動作(locale-specific behavior) 国家,文化及び言語の地域規約に依存する動作であり,
各処理系がその動作を文書化するもの。
例 文化圏固有動作の例としては,islower関数が26種類のラテン小文字以外の文字に対し,真を
返すかどうかがある。
3.4.3 未定義の動作(undefined behavior) 可搬性がない若しくは正しくないプログラム構成要素を使
用したときの動作,又は正しくないデータを使用したときの動作であり,この規格が何ら要求を課さない
もの。
参考 未定義の動作に対して,その状況を無視して予測不可能な結果を返してもよい。翻訳時又はプ
ログラム実行時に,文書化された,環境に特有な方法で処理してもよい(診断メッセージの発
行を伴っても伴わなくてもよい。)。さらに(診断メッセージを出力し)翻訳又は実行を中断し
てもよい。
例 未定義の動作の例としては,整数演算のオーバフローに対する動作がある。
3.4.4 未規定の動作(unspecified behavior) この規格が,二つ以上の可能性を提供し,個々の場合にど
の可能性を選択するかに関して何ら要求を課さない動作。
例 未規定の動作の例としては,関数の実引数の評価順序がある。
3.5 ビット(bit)
2種類の値のうちの一方を値としてもつオブジェクトを保持するために十分な大き
さをもつ実行環境でのデータ記憶域の単位。
参考1. オブジェクトの個々のビットのアドレスを表現できる必要はない。
2. ビットがもちうる2種類の値のうちの一方を値0という。ビットの値を値0以外にすること
を,この規格では,“ビットをセットする”という。
――――― [JIS X 3010 pdf 7] ―――――
4
X 3010 : 2003 (ISO/IEC 9899 : 1999)
3.6 バイト(byte)
実行環境の基本文字集合の任意の要素を保持するために十分な大きさをもつアド
レス付け可能なデータ記憶域の単位。
参考1. オブジェクトの個々のバイトのアドレスは,一意に表現できる。
2. バイトは連続するビットの列から成る。1バイト中のビットの個数は,処理系定義である。
最も重みの小さいビットを最下位ビット(low-order bit)と呼び,最も重みの大きいビットを
最上位ビット(high-order bit)と呼ぶ。
3.7 文字(character)
<抽象的意味>データを構成する,制御する,又は表現するために使用する基
本要素から成る集合の要素。
3.7.1 文字(character),1バイト文字(single-byte character) <プログラム言語Cでの意味>1バイ
トに納まるビット表現。
3.7.2 多バイト文字(multibyte character) ソース環境又は実行環境の拡張文字集合の要素を表す1バ
イト以上のバイトの列。
参考 拡張文字集合は,基本文字集合を包含する。
3.7.3 ワイド文字(wide character) 型wchartのオブジェクトに納まり,その時点のロケールでの任
意の文字を表現できるビット表現。
3.8 制約(constraint)
言語要素に関する規定を解釈するに当たっての構文上又は意味上の制限。
3.9 正しい丸めの結果(correctly rounded result)
有効な丸めモードの下で得られる結果の形式の表現
で,無制限の範囲及び精度を仮定して得られる結果に最も近いもの。
3.10 診断メッセージ(diagnostic message)
処理系が出力するメッセージのうち,処理系定義の部分集
合に属するメッセージ。
3.11 前方参照(forward reference)
その箇条に関連する付加情報を含むこの規格の前方の箇条への参照。
3.12 処理系(implementation)
特定の翻訳環境中において特定の制御オプションの下で走行し,特定の
実行環境用にプログラムを翻訳し,その実行環境における関数の実行をサポートする特定のソフトウェア
集合。
3.13 処理系限界(implementation limit)
処理系がプログラムに課す制限。
3.14 オブジェクト(object)
その内容によって,値を表現することができる実行環境中の記憶域の部分。
参考 オブジェクトを参照する場合,オブジェクトは,特定の型をもっていると解釈してもよい
(6.3.2.1参照)。
3.15 仮引数[parameter,formal parameter,formal argument(廃止予定)]
関数宣言若しくは関数定
義の一部として宣言され,関数に入る時点で値を得るオブジェクト,又は関数形式マクロ定義におけるマ
クロ名の直後の括弧で囲まれコンマで区切られた並びに現れる識別子。
3.16 推奨実装仕様(recommended practice)
この規格の趣旨に沿うために強く推奨する規定。しかし,
処理系によっては非現実的な場合もある。
3.17 値(value)
オブジェクトが特定の型をもっていると解釈する場合のオブジェクトの内容の厳密な
意味。
3.17.1 処理系定義の値(implementation-defined value) 未規定の値のうち,各処理系が選択した値を文
書化するもの。
3.17.2 不定の値(indeterminate value) 未規定の値又はトラップ表現。
3.17.3 未規定の値(unspecified value) 適切な型の正しい値であり,この規格が,個々の場合にどの値
を選択するかに対して何ら要求を課さないもの。
――――― [JIS X 3010 pdf 8] ―――――
5
X 3010 : 2003 (ISO/IEC 9899 : 1999)
参考 未規定の値は,トラップ表現となることはない。
3.18 x 上げ,すなわち,x以上の最小の整数。
例 2.4 ‰ 3。 2.4 ‰ 2。
3.19 x 下げ,すなわち,x以下の最大の整数。
例 2.4 ‰ 2。 2.4 ‰ 3。
4. 規格合致性
この規格では,“···(し)なければならない”という表現は,処理系又はプログラムに対
する要求を表す。さらに,“···(し)てはならない”という表現は,禁止を表す。
この規格の制約以外の箇所で現れる“···(し)なければならない”又は“···(し)てはならない”とい
う要求をプログラムが守っていない場合,その動作は未定義とする。この規格では,このほかに,用語“未
定義の動作”を使うことによるか又は動作の明示的な定義を与えないことによって未定義の動作を示すこ
ともある。これらの三つの書き方は強調度において何ら変わりはなく,それらはすべて“未定義の動作”
を規定する。
プログラムが未規定の動作を含んでいても,それ以外のあらゆる側面において正しく,かつ正しいデー
タを操作する場合,それは,正しいプログラムとみなし,5.1.2.3に従って動作しなければならない。
#error前処理指令が条件付き取込みによって読み飛ばされるグループの中にない限り,処理系は,
#error前処理指令を含む前処理翻訳単位の翻訳を成功させてはならない。
規格厳密合致プログラム(strictly conforming program)は,この規格で規定する言語機能及びライブラリ
だけを使用しなければならない(2)。さらに,いかなる未規定の動作,未定義の動作又は処理系定義の動作
に依存する出力も生成してはならず,しかもどのような最低限の処理系限界も超えてはならない。
規格合致処理系(conforming implementation)は,ホスト及びフリースタンディングの2種類とする。規
格合致ホスト処理系(conforming hosted implementation)は,任意の規格厳密合致プログラムを受理しなけ
ればならない。規格合致フリースタンディング処理系(conforming freestanding implementation)は,次の二
つの条件を満たす任意の規格厳密合致プログラムを受理しなければならない。
− 複素数型を使っていない。
− ライブラリの箇条(7.)で規定する機能の使用を,標準ヘッダ<float.h>,<iso646.h>,<limits.h>,
<stdarg.h>,<stdbool.h>,<stddef.h>及び<stdint.h>の内容に限定している。
規格合致処理系は,任意の規格厳密合致プログラムの動作を変更しない限り,(ライブラリ関数の追加を含
───────────────────────────────────────────────
(2) 規格厳密合致プログラムは,どの処理系でもサポートしているわけではない機能(附属書Fの中に例
がある。)を使うことができる。ただし,その機能を使うことができるのは,それが適切なマクロを
もつ#ifdef指令とそれに対応する#endif指令とに囲まれている場合に限る。次に示すプログラム
片がその例である。
#ifdef STDCIEC559
fesetround(FEUPWARD);
#endif
――――― [JIS X 3010 pdf 9] ―――――
6
X 3010 : 2003 (ISO/IEC 9899 : 1999)
む)拡張をしてもよい(3)。
規格合致プログラム(conforming program)は,ある規格合致処理系が受理することができるプログラム
とする(4)。
処理系は,すべての処理系定義の特性,すべての文化圏固有の特性及びすべての拡張を定義した文書を
伴わなければならない。
前方参照 エラー指令(6.10.5),可変個数実引数<stdarg.h>(7.15),共通の定義<stddef.h>(7.17),
条件付き取込み(6.10.1),整数型<stdint.h>(7.18),整数型の大きさ<limits.h>(7.10),代替つづり
<iso646.h>(7.9),浮動小数点型の特性<float.h>(7.7),論理型及び値<stdbool.h>(7.16)
5. 環境
処理系は,二つのデータ処理システム環境の中でCソースファイルを翻訳し,Cプログラムを
実行する。この規格では,これらの環境をそれぞれ翻訳環境(translation environment)及び実行環境(execution
environment)と呼ぶ。これらの環境がもつ特性は,構文規則及び意味規則に従って構成された規格合致C
プログラムのその規格合致処理系における実行結果を定義し,制約する。
前方参照 この箇条(5.)では,実際の前方参照の一部だけを示す。
5.1 概念モデル
5.1.1 翻訳環境
5.1.1.1 プログラム構成 一つのCプログラムの全体を同時に翻訳する必要はない。プログラムのテキス
トは,この規格でソースファイル(source file)[又は前処理ファイル(preprocessing file)]と呼ぶ単位で保
持する。一つのソースファイルに,#include前処理指令を通して取り込むすべてのヘッダ及びソースフ
ァイルを加えたものを前処理翻訳単位(preprocessing translation unit)と呼ぶ。前処理完了後の前処理翻訳
単位を翻訳単位(translation unit)と呼ぶ。過去に翻訳した翻訳単位を,個々に又はライブラリ中にまとめ
て保存してもよい。一つのプログラムを構成する各翻訳単位は,(例えば)識別子が外部結合をもつ関数の
呼出し,識別子が外部結合をもつオブジェクトの操作,又はデータファイルの操作によって,互いに連絡
する。複数の翻訳単位を別々に翻訳し,後で結合して一つの実行可能プログラムを作成してもよい。
前方参照 外部定義(6.9),識別子の結合(6.2.2),前処理指令(6.10)
5.1.1.2 翻訳フェーズ 次に示すフェーズによって,翻訳上の構文規則間の優先順位を規定する(5)。
(1) 必要ならば,物理的なソースファイルの多バイト文字を,対応するソース文字集合に,処理系定義
の方法で,写像する(この際,行の終わりを示すものに対して改行文字を導入する。)。3文字表記
を,対応する単一の文字の内部表現に置き換える。
(2) 逆斜線文字(\)の直後に改行文字が現れた場合,それらの2文字を削除する。これによって物理ソ
ース行を接合して論理ソース行を作成する。一つの物理ソース行においてこの接合の対象となるの
は,その行の最後の逆斜線文字だけとする。空でないソースファイルは,改行文字で終了しなけれ
───────────────────────────────────────────────
(3) これは,規格合致処理系がこの規格で明示的に予約する識別子以外の識別子を予約してはならないこ
とを意味する。
(4) 規格厳密合致プログラムは,規格合致処理系間で,最大限の可搬性を意図したプログラムである。規
格合致プログラムは,規格合致処理系における可搬性のない機能に依存してもよい。
(5) 処理系は,実際には,ここに示す幾つかのフェーズを一つにまとめてもよいが,ここに示す別々のフ
ェーズが存在するとみなした場合と同じ規則に従って動作しなければならない。
――――― [JIS X 3010 pdf 10] ―――――
次のページ PDF 11
JIS X 3010:2003の引用国際規格 ISO 一覧
- ISO/IEC 9899:1999(IDT)
JIS X 3010:2003の国際規格 ICS 分類一覧
- 35 : 情報技術.事務機械 > 35.060 : 情報技術に使用される言語
JIS X 3010:2003の関連規格と引用規格一覧
- 規格番号
- 規格名称
- JISX0201:1997
- 7ビット及び8ビットの情報交換用符号化文字集合
- JISX0301:2002
- 情報交換のためのデータ要素及び交換形式―日付及び時刻の表記