Oracle® Solaris Studio 12.4: C ユーザーガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

ISO/IEC C 99 の処理系定義の動作

『Programming Languages- C (ISO/IEC 9899:1999)』規格では、C で記述されるプログラムの形式を定義し、その解釈を確立します。ただしこの規格では、いくつかの項目が処理系定義 (コンパイラごとに内容が異なる) のままとなっています。この付録では、それらの動作を詳しく説明します。ISO/IEC 9899:1999 規格そのものとすぐに比較できるよう、この付録では、すべてのセクションの見出しにセクション番号を付記しています。

  • 各セクションの見出しには、ISO 規格にあるものと同じセクションテキストと letter.number 識別子を使用しています。

  • 各セクションでは、処理系で定義すべきこととして ISO 規格に規定されている要件を示しています。この要件のあとに、Oracle の処理系の説明があります。

  • 9899:1999 ISO C の動作を取得するには、-std=c99 フラグを指定します。

E.1 処理系定義の動作 (J.3)

この従属節で一覧になっている各分野での動作の選択肢を文書化するには、処理系に従う必要があります。処理系定義の動作は次のとおりです。

E.1.1 翻訳 (J.3.1)

  • (3.10, 5.1.1.3) 診断の識別方法

    エラーメッセージは次の書式です。

    filename, line number: message

    filename は、そのエラーまたは警告があるファイルの名前です

    line number はエラーまたは警告が検出された行の番号、message は診断メッセージです。

  • (5.1.1.2) 翻訳段階 3 で改行以外の非空の空白文字の連続を保持するか、またはスペース文字 1 つに置き換えるかどうか。

    タブ (\t) やフォームフィード (\f)、垂直タブ (\v) からなる非空の文字の連続をスペース文字 1 文字に置き換えます。

E.1.2 環境 (J.3.2)

  • (5.1.1.2) 翻訳段階 1 における物理ソースファイルの複数バイト文字とソース文字セットのマッピング。

    ASCII 部分では、1 文字に 8 ビットです。ロケール固有の拡張文字部分では、ロケール固有の 8 ビットの倍数です。

  • (5.1.2.1) 自立した環境でプログラム起動時に呼び出す関数の名前と種類。

    ホスト環境に実装されています。

  • (5.1.2.1) 自立した環境でのプログラム終了の処理。

    ホスト環境に実装されています。

  • (5.1.2.2.1) main 関数を定義する代わりの方法。

    規格に定義されている以外の main の定義方法はありません。

  • (5.1.2.2.1) main の argv 引数が指し示す文字列に与える値。

    argv は、コマンド行引数へのポインタからなる配列です。argv[0] はプログラム名を表します (該当する場合)。

  • (5.1.2.3) 対話型デバイスを構成するもの。

    対話型デバイスにはシステムライブラリコールの isatty() が 0 以外の値を返します。

  • (7.14) シグナルとその意味、デフォルトの処理。

    次の表に signal 関数が認識する各シグナルの意味を示します。

表 E-1  signal 関数のシグナルの意味
シグナル番号
デフォルトのイベント
シグナルの意味
SIGHUP 1
終了
ハングアップ
SIGINT 2
終了
割り込み (rubout)
SIGQUIT 3
コア
終了 (ASCII FS)
SIGILL 4
コア
不当な命令 (捕捉されてもリセットされない)
SIGTRAP 5
コア
トレーストラップ (捕捉されてもリセットされない)
SIGIOT 6
コア
IOT 命令
SIGABRT 6
コア
異常終了時に使用
SIGEMT 7
コア
EMT 命令
SIGFPE 8
コア
浮動小数点例外
SIGKILL 9
終了
強制終了 (捕捉または無視できない)
SIGBUS 10
コア
バスエラー
SIGSEGV 11
コア
セグメンテーション違反
SIGSYS 12
コア
システムコールへの引数誤り
SIGPIPE 13
終了
読み手のないパイプ上への書き込み
SIGALRM 14
終了
アラームクロック
SIGTERM 15
終了
プロセスの終了によるソフトウェアの停止
SIGUSR1 16
終了
ユーザー定義のシグナル 1
SIGUSR2 17
終了
ユーザー定義のシグナル 2
SIGCLD 18
無視
子プロセスのステータスが変化
SIGCHLD 18
無視
子プロセスステータスの変化の別名 (POSIX)
SIGPWR 19
無視
電源異常と再起動
SIGWINCH 20
無視
ウィンドウサイズの変更
SIGURG 21
無視
ソケット上に緊急状態
SIGPOLL 22
終了
ポーリング可能なイベント発生
SIGIO 22
Sigpoll
ソケット入出力可能
SIGSTOP 23
停止
停止 (キャッチまたは無視できない)
SIGTSTP 24
停止
tty より要求されたユーザーストップ
SIGCONT 25
無視
停止していたプロセスの継続
SIGTTIN 26
停止
バックグラウンド tty の読み込みを試みた
SIGTTOU 27
停止
バックグラウンド tty の書き込みを試みた
SIGVTALRM 28
終了
仮想タイマー期限切れ
SIGPROF 29
終了
プロファイルタイマー期限切れ
SIGXCPU 30
コア
CPU 時間制限の超過
SIGXFSZ 31
コア
ファイルサイズの限界をオーバー
SIGWAITING 32
無視
スレッド処理コードで使われていた予約シグナル
SIGLWP 33
無視
スレッド処理コードで使われていた予約シグナル
SIGFREEZE 34
無視
チェックポイント一時停止
SIGTHAW 35
無視
チェックポイント再開
SIGCANCEL 36
無視
スレッドライブラリで使われている取り消しシグナル
SIGLOST 37
無視
リソースがない (レコードロックがない)
SIGXRES 38
無視
リソース制御の超過 (setrctl(2) を参照)
SIGJVM1 39
無視
Java Virtual Machine 用に予約 1
SIGJVM2 40
無視
Java Virtual Machine 用に予約 2
  • (7.14.1.1) SIGFPESIGILL、および SIGSEGV 以外の、演算例外に対応するシグナル値

    SIGILLSIGFPESIGSEGVSIGTRAPSIGBUSSIGEMTTable E–1を参照。

  • プログラムの起動時に signal に相当するもの (sigSIG_IGN) が実行される際のシグナル (7.14.1.1)。

    SIGILLSIGFPESIGSEGVSIGTRAPSIGBUSSIGEMTTable E–1を参照。

  • (7.20.4.5) 環境名および、getenv 関数が使用する環境リストの変更方法。

    マニュアルページの environ(5) に環境名の一覧を記載しています。

  • (7.20.4.6) system 関数による文字列の実行方法。

    system(3C) のマニュアルページからの抜粋

    system() 関数は、端末からコマンドとして入力されかのように string を入力としてシェルに渡します。この呼び出し側は、シェルが完了するのを待ち、waitpid(2) が指定する形式でシェルの終了ステータスを返します。

    string が null ポインタの場合、system() はシェルが存在し、実行可能かどうかを調べます。シェルが使用可能な場合は、system () によってゼロ以外の値を返し、そうでない場合は、0 を返します。

E.1.3 識別子 (J.3.3)

  • (6.4.2) 識別子に追加で使用される複数バイト文字とその汎用文字名との対応。

    なし

  • (5.2.4.1, 6.4.2) 識別子の有効初期文字数。

    1023

E.1.4 文字 (J.3.4)

  • (3.6) 1 バイトのビット数。

    1 バイトは 8 ビットです。

  • (5.2.1) 実行文字セットのメンバーの値。

    ASCII 部分では、配置はソース文字と実行文字と同様です。

  • (5.2.2) 各標準の英字エスケープシーケンス用に生成される実行文字セットのメンバーの固有値。

表 E-2  標準の英字エスケープシーケンスの固有値
エスケープシーケンス
固有値
\a (アラート)
7
\b (バックスペース)
8
\f (フォームフィード)
12
\n (改行)
10
\r (復帰)
13
\t (水平タブ)
9
\v (垂直タブ)
11
  • (6.2.5) 基本実行文字セットのメンバー以外の文字が格納されている char オブジェクトの値。

    char オブジェクトに割り当てられている文字に関連付けられている下位 8 ビットの数値です。

  • (6.2.5, 6.3.1.1) signed char または unsigned char のどちらが単純 char と同じ範囲、表現、および動作を持つか。

    signed char が通常の char として処理されます。

  • (6.4.4.4, 5.1.1.2) ソース文字セット (文字定数と文字列リテラル) のメンバーの実行文字セットメンバーへのマッピング。

    ASCII 部分では、配置はソース文字と実行文字と同様です。

  • (6.4.4.4) 複数の文字、または単一バイトの実行文字にマッピングされていない文字またはエスケープシーケンスを含む整数文字定数の値。

    エスケープシーケンスの発生しない複数バイト文字セットの値は、各文字の示す数値から派生しています。

  • (6.4.4.4) 複数の複数バイト文字、または拡張実行文字セットで表現されていない複数バイト文字またはエスケープシーケンスを含むワイド文字定数の値。

    エスケープシーケンスではない複数文字のワイド文字定数は、各文字の数値から得られる値を持ちます。

  • (6.4.4.4) 拡張実行文字セットのメンバーにマッピングする単一複数バイト文字からなるワイド文字定数を、対応するワイド文字コードに変換するために使用する標準ロケール。

    LC_ALLLC_CTYPELANG 環境変数のいずれかで指定したロケールが標準で使用されます。

  • (6.4.5) ワイド文字列リテラルを、対応するワイド文字コードに変換するのに使用する標準ロケール。

    LC_ALLLC_CTYPELANG 環境変数のいずれかで指定されたロケールが標準で使用されます。

  • (6.4.5) 拡張実行文字セットで表現されていない複数バイト文字またはエスケープシーケンスを含む文字列リテラルの値。

    複数バイト文字の各バイトが文字列リテラルの 1 文字を表し、この文字は、複数バイト文字のそのバイトの数値に等しい値を持ちます。

E.1.5 整数 (J.3.5)

  • (6.2.5) 実装に存在する拡張整数型。

    なし

  • (6.2.6.2) 符号付き整数型を符号と絶対値、2 の補数、1 の補数のどれで表現するか、また規格外の値をトラップ表現または通常値のどちらにするか。

    符号付き整数型は 2 の補数で表します。規格外の値は通常値になります。

  • (6.3.1.1) 任意の拡張整数型と同じ精度を持つ別の拡張整数型との相対的なランク。

    この実装に該当するものはありません。

  • (6.3.1.3) 整数を符号付き整数型に変換し、値がその型のオブジェクトで表現できない場合の結果、または立てられるシグナル。

    整数がより短い符号付き整数に変換される場合は、長い方の整数の下位ビットが短い方の符号付き整数に複写されます。結果は負になることがあります。

    符号なし整数が同サイズの符号付き整数に変換される場合は、符号なし整数の下位ビットが符号付き整数に複写されます。結果は負になることがあります。

  • (6.5) 符号付き整数に対するビット単位演算の結果。

    ビット単位演算を符号付きの型に適用すると、符号ビットを含むオペランドのビット単位演算となります。その結果の各ビットは、両オペランドの対応するビットが設定されていた場合にのみ設定されます。

E.1.6 浮動小数点 (J.3.6)

  • (5.2.4.2.2) 浮動小数点の結果を返す浮動小数点演算、および <math.h><complex.h> のライブラリ関数の精度。

    浮動小数点演算の精度は FLT_EVAL_METHOD の設定に合わせられます。<math.h><complex.h> のライブラリ関数の精度は、libm(3LIB) のマニュアルページに指定されているとおりです。

  • (5.2.4.2.2) FLT_ROUNDS の規格外の値に対する丸め動作。

    この実装に該当するものはありません。

  • (5.2.4.2.2) FLT_EVAL_METHOD の規格外の負の値に対する評価方法。

    この実装に該当するものはありません。

  • (6.3.1.4) 整数を、元の値を正確に表現できない浮動小数点数に変換したときの丸め方向。

    そのとき有効な丸め方向モードに従います。

  • (6.3.1.5) 浮動小数点数を短い浮動小数点数に変換した場合の丸め方向。

    そのとき有効な丸め方向モードに従います。

  • (6.4.4.2) 特定の浮動小数点定数を表現する方法 (表現可能な最近似値か、最近似値にもっとも近い最大または最小値)。

    浮動小数点定数はつねに表現可能な最近似値に丸められます。

  • (6.5) FP_CONTRACTプラグマが許可していない場合に浮動小数点式を短縮するかどうか、また、短縮する場合はその方法。

    この実装に該当するものはありません。

  • (7.6.1) FENV_ACCESS プラグマのデフォルトの状態。

    -fsimple=0 の場合、デフォルトは ON です。それ以外の -fsimple のほかのすべての値で FENV_ACCESS のデフォルト値は OFF です。

  • (7.6, 7.12) 追加の浮動小数点例外、丸めモード、環境、分類、マクロ名。

    この実装に該当するものはありません。

  • (7.12.2) FP_CONTRACTプラグマのデフォルトの状態。

    -fsimple=0 の場合、デフォルトは OFF です。それ以外の -fsimple のほかのすべての値で FP_CONTRACT のデフォルト値は ON です。

  • (F.9) IED 60559 準拠の実装で丸め結果が実際には数学的な演算結果に等しくない場合に「不正確」の浮動小数点例外が立てられるかどうか。

    結果の判定は不可能です。

  • (F.9) IEC 60559 準拠の実装で結果が小さいが不正確でない場合に、アンダーフロー (および「不正確」) の浮動小数点例外を立てられるかどうか。

    アンダーフロー時のトラップが無効 (デフォルト) の場合、このようなケースでハードウェアはアンダーフローや不正確の例外を立てません。

E.1.7 配列とポインタ (J.3.7)

  • (6.3.2.3) ポインタを整数または 64 ビットに変換、またはその逆方向に変換した結果。

    ポインタおよび整数の変換では、ビットパターンは変化しません。整数またはポインタ型で結果を表現できない場合を除きますが、結果は定義されていません。

  • (6.5.6) 同じ配列の要素への 2 つのポインタを減算した結果のサイズ。

    stddef.h で定義されているとおり int 型です。-m64 の場合は long 型です。

E.1.8 ヒント (J.3.8)

  • (6.7.1) レジスタ記憶クラス指示子で行う推奨を有効にする範囲。

    有効なレジスタ宣言の数は使用パターンおよび各関数における定義に依存し、割り当て可能なレジスタ数に制限されます。コンパイラやオプティマイザは、レジスタ宣言に従う必要はありません。

  • (6.7.4) inline 関数指定子で行う推奨を有効にする範囲。

    inline キーワードは、最適化でコードのインライン化が発生し、インライン化のメリットがあるとオプティマイザが判断したときにのみ有効です。最適化のオプションのリストについては、最適化とパフォーマンスのオプションを参照してください。

E.1.9 構造体、共用体、列挙型、およびビットフィールド (J.3.9)

  • (6.7.2, 6.7.2.1) 単純な int 型ビットフィールドを signed int 型ビットフィールドまたは unsigned int ビットフィールドのどちらにみなすか。

    unsigned int とみなされます。

  • (6.7.2.1) _Boolsigned int、および unsigned int 以外に使用可能なビットフィールドの型。

    ビットフィールドは任意の整数型として宣言できます。

  • (6.7.2.1) ビットフィールドが記憶装置の境界を越えられるかどうか。

    ビットフィールドは記憶装置の境界を越えません。

  • (6.7.2.1) ユニット内のビットフィールドの割り当て順序。

    ビットフィールドは、記憶装置内で高位から低位の順に割り当てられます。

  • (6.7.2.1) 構造体のビットフィールド以外のメンバーの整列条件。1 つの実装で書き込まれたバイナリデータが別の実装で読み取られないかぎり、このことは問題になりません。

表 E-3  構造体メンバーのパディングと整列
整列境界
バイト整列
char_Bool
byte
1
short
halfword
2
int
word
4
long -m32
word
4
long -m64
doubleword
8
float
word
4
double -m64
doubleword
8
double (SPARC) -m32
doubleword
8
double (x86) -m32
doubleword
4
long double (SPARC) -m32
doubleword
8
long double (x86) -m32
word
4
longdouble -m64
quadword
16
pointer -m32
word
4
pointer -m64
quadword
8
long long —m64
doubleword
8
long long (x86) -m32
word
4
long long (SPARC) -m32
doubleword
8
_Complex float
word
4
_Complex double -m64
doubleword
8
_Complex double (SPARC) -m32
doubleword
8
_Complex double (x86) -m32
doubleword
4
_Complex long double -m64
quadword
16
_Complex long double (SPARC) -m32
quadword
8
_Complex long double (x86) -m32
quadword
4
_Imaginary float
word
4
_Imaginary double -m64
doubleword
8
_Imaginary double (x86) -m32
doubleword
4
_Imaginary (SPARC) -m32
doubleword
8
_Imaginary long double (SPARC) -m32
doubleword
8
_Imaginary long double -m64
quadword
16
_Imaginary long double (x86) -m32
word
4
  • (6.7.2.2) 各列挙型と互換性のある整数型。

    int 型です。

E.1.10 修飾子 (J.3.10)

  • (6.7.3) volatile 修飾型のオブジェクトへのアクセス。

    オブジェクト名を参照するたびに、そのオブジェクトへアクセスされます。

E.1.11 前処理指令 (J.3.11)

  • (6.4.7) 両方の形式のヘッダー名のシーケンスをヘッダーまたは外部ソースファイル名にマッピングする方法。

    ソースファイルの文字は対応する ASCII の値に配置されます。

  • (6.10.1) 条件付きのインクルードを制御する定数式の文字定数の値が、実行文字セット中の同一の文字定数の値に一致するかどうか。

    前処理命令内の文字定数はほかの式のものと同一の数値を持ちます。

  • (6.10.1) 条件付きのインクルードを制御する定数式の単一文字の文字定数が負の値をとることがあるかどうか。

    この場合の文字定数は負の値を取ることがあります。

  • (6.10.2) インクルードする、< > 区切りのヘッダーの検索場所と、その場所の指定方法、ほかのヘッダーの識別方法。

    ヘッダーファイルの場所は、コマンド行のオプションの指定と、#include 指令 内に現れるファイルに依存します。詳細は、インクルードファイルを指定する方法を参照してください。

  • (6.10.2) インクルードする " " 区切りのヘッダー内での指定されたソースファイルの検索方法。

    ヘッダーファイルの場所は、コマンド行のオプションの指定と、#include 指令 内に現れるファイルに依存します。詳細は、インクルードファイルを指定する方法を参照してください。

  • (6.10.2) #include 指令内の前処理トークン (マクロ展開で生成されることもある) からヘッダー名を形成する方法。

    インクルードファイルを指定する方法で説明しているように、ヘッダー名 (空白を含む) を形成するすべてのトークンは、ヘッダーを検索する際に使用するファイルパスとみなされます。

  • (6.10.2) #include 処理の入れ子制限。

    コンパイラによる制限はありません。

  • (6.10.3.2) 文字定数または文字列定数に # 演算子があるとき、汎用文字名で始まる \ 文字の前に \ 文字を挿入するかどうか。

    いいえ。

  • (6.10.6) 非 STDC の #pragma 指令が認識されたときの動作。

    非 STDC のプラグマ 指令が認識されたときの動作については、Pragmasを参照してください。

  • (6.10.8) 翻訳の日付と時間がわからないときの __DATE____TIME__ の定義。

    これらのマクロは常に使用できます。

E.1.12 ライブラリ関数 (J.3.12)

  • (5.1.2.1) 第 4 節で規定されている最小セット以外に自立したプログラムから使用可能なライブラリ機能。

    ホスト環境に実装されています。

  • (7.2.1.1) 表明マクロが出力する診断の形式。

    診断は次のような形式になっています。

    Assertion failed: statement. file filename, line number, function name

    statement は表明が失敗した文dす。filename__FILE__ の値です。line number__LINE__ です。function name__func__ の値です。

  • (7.6.2.2) fegetexceptflag 関数が格納する浮動小数点ステータスフラグの表現。

    fegetexceptflag によってステータスフラグに格納された各例外は、定数のすべての組み合わせのビット単位 OR が明確な値を持つように、値を持つ整定数式に展開されます。

  • (7.6.2.3) 「オーバーフロー」または「アンダーフロー」浮動小数点例外のほかに feraiseexcept 関数によって「不正確」浮動小数点例外が立てられるかどうか。

    「不正確」の例外は立てられません。

  • (7.11.1.1) setlocale 関数への第 2 引数として渡すことが可能な、「C」および "" 以外の文字列。

    意図的に空白にします。

  • (7.12) FLT_EVAL_METHODマクロの値がゼロ未満か 2 より大きい場合に float_t および double_t に定義される型。

    • SPARC の場合、型は次のとおりです。

      typedef float float_t;

      typedef double double_t;

    • x86 の場合、型は次のとおりです。

      typedef long double float_t;

      typedef long double double_t;

    (7.12.1) この国際規格で規定されている以外の、数学関数のドメインエラー。

    入力引数が 0 か +/--Inf NaN のどれかの場合、ilogb()、ilogbf()、および ilogbl() は不正の例外を立てます。

  • (7.12.1) ドメインエラー時に数学関数が返す値。

    ドメインエラー時に返される値は、『Programming Language - C (ISO/IEC 9899:1999)』の Annex F で指定されているとおりです。

  • アンダーフロー範囲エラー時に数学関数が返す値と、整数式の math_errhandling & MATH_ERRNO がゼロ以外の場合に errno にマクロ ERANGE の値が設定されるかどうか、また整数式の math_errhandling & MATH_ERREXCEPT がゼロ以外の場合に「アンダーフロー」浮動小数点例外が立てられるかどうか。(7.12.1)

    アンダーフロー範囲エラーについて: 値が非正規数の可能性がある場合は、その非正規数が返され、それ以外の場合は、適宜 +-0 が返されます。

    整数式の math_errhandling & MATH_ERRNO がゼロ以外の場合に errnoERANGE マクロの値が設定されるかどうかについて、Oracle の実装では、(math_errhandling & MATH_ERRNO) == 0 のため、この部分は該当しません。

    整数式の math_errhandling & MATH_ERREXCEPT がゼロ以外の場合 (7.12.1) に「アンダーフロー」浮動小数点例外が立てられるかどうかについて: 浮動小数点アンダーフローとともに精度が失われた場合に例外が立てられます。

  • (7.12.10.1) fmod 関数の第 2 引数が 0 の場合に、ドメインエラーとなるか、0 が返されるか。

    ドメインエラーが発生します。

  • (7.12.10.3) 商を約分する際に remquo 関数が使用する係数の 2 を底とする対数。

    31.

  • (7.14.1.1) シグナルハンドラを呼び出す前に signal(sig, SIG_DFL); 相当のものを実行するかどうか、また実行されない場合は、実行されるシグナルのブロック処理。

    シグナルハンドラを呼び出す前に signal(sig, SIG_DFL); 相当を実行します。

  • (7.17) マクロ NULL を展開したときの null ポインタ定数。

    NULL は 0 に展開されます。

  • (7.19.2) テキストストリームの最終行で改行文字による終了を必要とするか。

    最終行を改行文字で終了する必要はありません。

  • (7.19.2) テキストストリームへの書き出しでスペース文字が改行文字の直前にあった場合、そのスペース文字が読み込みで表示されるかどうか。

    ストリームが読み込まれるときにはすべての文字が表示されます。

  • (7.19.2) バイナリストリームに書き込まれるデータに追加することのできる null 文字の数。

    バイナリストリームには null 文字を追加しません。

  • (7.19.3) 当初、アペンドモードのストリームのファイル位置指示子がファイルの始まりと終わりのどちらに置かれるか。

    ファイル位置指示子は最初にファイルの終わりに置かれます。

  • (7.19.3) テキストストリームへの書き込みを行うと、関係するファイルの内容が書き込み点以降切り捨てられるか。

    ハードウェアの命令がないかぎり、テキストストリームへの書き込みによって書き込み点以降の関連ファイルが切り捨てられることはありません。

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

    標準エラーストリーム (stderr) を除く出力ストリームは、デフォルトでは、出力がファイルの場合にはバッファリングされ、出力が端末の場合にはラインバッファリングされます。標準エラー出力ストリーム (stderr) は、デフォルトではバッファリングされません。

    バッファリングされた出力ストリームは多くの文字を保存し、その文字をブロックとして書き込みます。バッファリングされなかった出力ストリームは宛先ファイルあるいは端末に迅速に書き込めるように情報の待ち行列を作ります。行バッファリングされた出力は、その行が完了するまで (改行文字が要求されるまで) 行単位の出力待ち行列に入れられます。

  • (7.19.3) 長さゼロのファイルが実際に存在するかどうか。

    ディレクトリエントリを持つという意味ではゼロ長ファイルは存在します。

  • (7.19.3) 有効なファイル名の作成規則。

    有効なファイル名は 1 から 1,023 文字までの長さで、NULL 文字とスラッシュ (/) 以外のすべての文字を使用することができます。

  • (7.19.3) 同一のファイルを同時に複数回開くことが可能か。

    同一のファイルを何回も開くことができます。

  • (7.19.3) ファイル内の複数バイト文字に使用する符号化方式の性質と選択方法。

    複数バイト文字に使用する符号化方式は、ファイルごとに同じです。

  • (7.19.4.1) 開いたファイルに対する remove() 関数の処理。

    ファイルを閉じる最後の呼び出しによりファイルが削除されます。すでに除去されたファイルをプログラムが開くことはできません。

  • (7.19.4.2) rename 関数を呼び出す前に新しい名前を持つファイルがあった場合の処理。

    そのようなファイルがあれば削除され、新しいファイルが元のファイルの上に書き込まれます。

  • (7.19.4.3) プログラムの異常終了時に開いていた一時ファイルが削除されるかどうか。

    ファイルの作成とリンク解除の間にプロセスが終了した場合は、ファイルがそのまま残ることがあります。freopen(3C) のマニュアルページを参照してください。

  • (7.19.5.4) 許されるモードの変更とその状況。

    ストリームの基になっているファイル記述子のアクセスモードに従って、次のモード変更が許されます。

    • + が指定されている場合、ファイル記述子モードは O_RDWR である必要があります。

    • r が指定されている場合、ファイル記述子モードは O_RDONLYO_RDWR である必要があります。

    • a または w が指定されている場合、ファイル記述子モードは O_WRONLYO_RDWR である必要があります。

      freopen(3C) のマニュアルページを参照してください。

    (7.19.6.1, 7.24.2.1) 無限または NaN の出力に使用する形式と NaN で出力する n-char または n-wchar シーケンスの意味。

    [-]Inf、[-]NaN です。F 変換指示子がある場合は、[-]INF、[-]NAN になります。

  • (7.19.6.1, 7.24.2.1) fprintf または fwprintf 関数における %p 変換の出力。

    %p の出力は %x と等しくなります。

  • (7.19.6.2, 7.24.2.1) fscanf() または fwscanf() 関数における %[ 変換のスキャンリストで、先頭文字でも最終文字でもなく、また先頭文字が ^ の場合に 2 番目の文字でもない - 文字の解釈。

    - がスキャンリストにあり、先頭文字でも最終文字でもなく、^ が先頭文字の場合に 2 番目の文字でない場合は、一致とみなす文字の範囲を示します。

    fscanf(3C) のマニュアルページを参照してください。

  • (7.19.6.2, 7.24.2.2) fscanf() または fwscanf() 関数の %p 変換で一致とみなされるシーケンスと、対応する入力項目の解釈。

    対応する printf(3C) 関数の %p 変換で生成されるシーケンスと同じシーケンスを一致とみなします。対応する引数は、void 型ポインタへのポインタである必要があります。入力項目が同じプログラムの実行中の以前に変換された値の場合、生成されるポインタはその値に等しいとみなされます。それ以外の場合の %p 変換の動作は定義されていません。

    fscanf(3C) のマニュアルページを参照してください。

  • (7.19.9.1, 7.19.9.3, 7.19.9.4) エラー時に fgetposfsetposftell 関数がマクロ errnoに設定する値。

    • EBADF ストリームの基になっているファイル記述子が不正です。fgetpos(3C) のマニュアルページを参照してください。

    • ESPIPE ストリームの基になっているファイル記述子がパイプか FIFO、ソケットに関連付けられています。fgetpos(3C) のマニュアルページを参照してください。

    • EOVERFLOW fpos_t 型のオブジェクトでは、ファイル位置の現在の値を正しく表現できません。fgetpos(3C) のマニュアルページを参照してください。

    • EBADF ストリームの基になっているファイル記述子が不正です。fsetpos(3C) のマニュアルページを参照してください。

    • ESPIPE ストリームの基になっているファイル記述子がパイプか FIFO、ソケットに関連付けられています。fsetpos(3C) のマニュアルページを参照してください。

    • EBADF ストリームの基になっているファイル記述子が開いているファイルの記述子ではありません。ftell(3C) のマニュアルページを参照してください。

    • ESPIPE ストリームの基になっているファイル記述子がパイプか FIFO、ソケットに関連付けられています。ftell(3C) のマニュアルページを参照してください。

    • EOVERFLOW long 型のオブジェクトでは、現在のファイルオフセット値を正しく表現できません。ftell(3C) のマニュアルページを参照してください。

    (7.20.1.3, 7.24.4.1.1) strtod()strtof()strtold()wcstod()wcstof()、または wcstold() 関数によって変換される NaN を表す文字列内の n-char または n-wchar シーケンスの意味。

    n-char シーケンスには特別な意味は与えられていません。

  • アンダーフローが発生したとき、strtodstrtofstrtoldwcstodwcstof、または wcstold 関数が errnoERANGE を設定するかどうか。(7.20.1.3, 7.24.4.1.1)

    アンダーフロー時、errno には ERANGE が設定されます。

  • (7.20.3) 要求サイズがゼロの場合、callocmalloc、および realloc 関数が null ポインタまたは割り当てオブジェクトへのポインタのどちらを返すか。

    null ポインタか free() に渡すことが可能な一意のポインタが返されます。

    malloc(3C) のマニュアルページを参照してください。

  • (7.20.4.1, 7.20.4.4) abort または _Exit 関数が呼び出されたときに、バッファー内にまだ書き出されていないデータがある開いているストリームをフラッシュするか、開いているストリームを閉じるか、一時ファイルを削除するか。

    異常終了処理では、開いているすべてのストリームに対して少なくとも fclose(3C) の処理が行われます。abort(3C) のマニュアルページを参照してください。

    開いているストリームが閉じられます。フラッシュはされません。_Exit(2) のマニュアルページを参照してください。

  • (7.20.4.1, 7.20.4.3, 7.20.4.4) abortexit、または _Exit 関数がホスト環境に返す終了ステータス。

    abort によって wait(3C) または waitpid(3C) から使用できるようにされたステータスが、SIGABRT シグナルで終了されたプロセスのステータスになります。abort(3C)、exit(1)、および _Exit(2) のマニュアルページを参照してください。

    exit または _Exit によって返される終了ステータスは、呼び出し側のプロセスの親プロセスが行なっていた処理によって異なります。

    呼び出し側プロセスの親プロセスが wait(3C) か wait3(3C)、waitid(2)、waitpid(3C) のどれかを実行していて、その SA_NOCLDWAIT フラグの設定がなく、かつ SIGCHLDSIG_IGN に設定していなかった場合、親プロセスは呼び出し側プロセスの終了の通知を受け、ステータスの下位 8 ビット (すなわち、ビット 0377) を使用できるようになります。親が待ち状態ではない場合は、そのあと、親が wait()、wait3()、 waitid()、waitpid() のどれかを実行した時点で子のステータスを利用できるようになります。

  • (7.20.4.6) 引数が null ポインタ以外の場合に system 関数によって返される値。

    waitpid(3C) によって指定された形式でシェルの終了ステータスが返されます。

  • (7.23.1) 現地時間帯と夏時間。

    現地時間帯は、環境変数 TZ で設定します。

  • (7.23) clock_t および time_t で表現可能な時間の範囲と精度。

    clock_t および time_t の精度は 100 万分の 1 秒です。範囲は、x86 および SPARC-V8 では -2147483647-1 から 4294967295 (100 万分の 1 秒) です。SPARC-v9 では、-9223372036854775807LL-1 から 18446744073709551615 です。

  • (7.23.2.1) clock 関数の経過時間。

    clock 関数の経過時間は、プログラム実行開始時を原点とする時間経過として表現されます。

  • (7.23.3.5, 7.24.5.1) “C” ロケールにおける、strftime および wcsftime 関数に対する %Z 指定子の置換文字列。

    時間帯の名前か短縮名。また、時間帯の判定ができない場合は、置換文字なしです。

  • (F.9) IEC 60559 準拠の実装で trigonometrichyperbolic、e を底とする指数、e を底とする対数、エラー、ログガンマ関数が「不正確」の浮動小数点例外を立てるかどうか、また立てる場合はそのタイミング。

    一般に「不正確」の例外は、結果が正確に表現できない場合に立てられます。また「不正確」の例外は、結果が正確に表現可能な場合にも立てられることがあります。

  • <math.h> 内の関数が IEC 60559 準拠の処理系における丸め方向モードに従うかどうか (F.9)。

    <math.h> のどの関数についても、デフォルトの丸め方向モードの強制は試みられません。

E.1.13 アーキテクチャー (J.3.13)

  • (5.2.4.2, 7.18.2, 7.18.3) ヘッダー <float.h><limits.h>、および <stdint.h> に指定されているマクロに割り当てられている値または式。

    • <float.h> に指定されているマクロに対する値または式は次のとおりです。

      #define CHAR_BIT 8 /* max # of bits in a “char” */
      #define SCHAR_MIN (-128) /* min value of a “signed char” */
      #define SCHAR_MAX 127 /* max value of a “signed char” */
      #define CHAR_MIN SCHAR_MIN /* min value of a “char” */
      #define CHAR_MAX SCHAR_MAX /* max value of a “char” */
      #define MB_LEN_MAX 5
      #define SHRT_MIN (-32768) /* min value of a “short int” */
      #define SHRT_MAX 32767 /* max value of a “short int” */
      #define USHRT_MAX 65535 /* max value of “unsigned short int” */
      #define INT_MIN (-2147483647-1) /* min value of an “int” */
      #define INT_MAX 2147483647 /* max value of an “int” */
      #define UINT_MAX 4294967295U /* max value of an “unsigned int” */
      #define LONG_MIN (-2147483647L-1L)
      #define LONG_MAX 2147483647L /* max value of a “long int” */
      #define ULONG_MAX 4294967295UL /* max value of “unsigned long int” */
      #define LLONG_MIN (-9223372036854775807LL-1LL)
      #define LLONG_MAX 9223372036854775807LL
      #define ULLONG_MAX 18446744073709551615ULL
      
      #define FLT_RADIX 2
      #define FLT_MANT_DIG 24
      #define DBL_MANT_DIG 53
      #define LDBL_MANT_DIG 64
      
      #if defined(__sparc)
      #define DECIMAL_DIG 36
      #elif defined(__i386)
      #define DECIMAL_DIG 21
      #endif
      #define FLT_DIG 6
      #define DBL_DIG 15
      #if defined(__sparc)
      #define LDBL_DIG 33
      #elif defined(__i386)
      #define LDBL_DIG 18
      #endif
      
      #define FLT_MIN_EXP (-125)
      #define DBL_MIN_EXP (-1021)
      #define LDBL_MIN_EXP (-16381)
      
      #define FLT_MIN_10_EXP (-37)
      #define DBL_MIN_10_EXP (-307)
      #define LDBL_MIN_10_EXP (-4931)
      
      #define FLT_MAX_EXP (+128)
      #define DBL_MAX_EXP (+1024)
      #define LDBL_MAX_EXP (+16384)
      
      #define FLT_EPSILON 1.192092896E-07F
      #define DBL_EPSILON 2.2204460492503131E-16
      
      #if defined(__sparc)
      #define LDBL_EPSILON 1.925929944387235853055977942584927319E-34L
      #elif defined(__i386)
      #define LDBL_EPSILON 1.0842021724855044340075E-19L
      #endif
      
      #define FLT_MIN 1.175494351E-38F
      #define DBL_MIN 2.2250738585072014E-308
      
      #if defined(__sparc)
      #define LDBL_MIN 3.362103143112093506262677817321752603E-4932L
      #elif defined(__i386)
      #define LDBL_MIN 3.3621031431120935062627E-4932L
      #endif
    • <limits.h> に指定されているマクロに対する値または式は次のとおりです。

      #define INT8_MAX (127)
      #define INT16_MAX (32767)
      #define INT32_MAX (2147483647)
      #define INT64_MAX (9223372036854775807LL)
      
      #define INT8_MIN (-128)
      #define INT16_MIN (-32767-1)
      #define INT32_MIN (-2147483647-1)
      #define INT64_MIN (-9223372036854775807LL-1)
      
      #define UINT8_MAX (255U)
      #define UINT16_MAX (65535U)
      #define UINT32_MAX (4294967295U)
      #define UINT64_MAX (18446744073709551615ULL)
      
      #define INT_LEAST8_MIN INT8_MIN
      #define INT_LEAST16_MIN INT16_MIN
      #define INT_LEAST32_MIN INT32_MIN
      #define INT_LEAST64_MIN INT64_MIN
      
      #define INT_LEAST8_MAX INT8_MAX
      #define INT_LEAST16_MAX INT16_MAX
      #define INT_LEAST32_MAX INT32_MAX
      #define INT_LEAST64_MAX INT64_MAX
      
      #define UINT_LEAST8_MAX UINT8_MAX
      #define UINT_LEAST16_MAX UINT16_MAX
      #define UINT_LEAST32_MAX UINT32_MAX
      #define UINT_LEAST64_MAX UINT64_MAX
    • <stdint.h> に指定されているマクロに対する値または式は次のとおりです。

      #define INT_FAST8_MIN INT8_MIN
      #define INT_FAST16_MIN INT16_MIN
      #define INT_FAST32_MIN INT32_MIN
      #define INT_FAST64_MIN INT64_MIN
      
      #define INT_FAST8_MAX INT8_MAX
      #define INT_FAST16_MAX INT16_MAX
      #define INT_FAST32_MAX INT32_MAX
      #define INT_FAST64_MAX INT64_MAX
      
      #define UINT_FAST8_MAX UINT8_MAX
      #define UINT_FAST16_MAX UINT16_MAX
      #define UINT_FAST32_MAX UINT32_MAX
      #define UINT_FAST64_MAX UINT64_MAX
    
    
  • (6.2.6.1) この国際規格に明示的に規定されていないオブジェクトのバイト数と順序、符号化方式。

    1999 C 規格に明示的に規定されていないオブジェクトの処理系定義のバイト数と順序、符号化方式は、この章の別の場所で定義する必要があります。

  • (6.5.3.4) sizeof 演算子の結果の値。

    次の表は、sizeof の結果を一覧表示します。

表 E-4  sizeof 演算子の結果 (バイト単位)
バイト単位のサイズ
char_Bool
1
short
2
int
4
long
4
long -m64
8
long long
8
float
4
double
8
long double (SPARC)
16
long double (x86) -m32
12
long double (x86) -m64
16
pointer
4
pointer -m64
8
_Complex float
8
_Complex double
16
_Complex long double (SPARC)
32
_Complex long double (x86) -m32
24
_Complex long double (x86) -m64
32
_Imaginary float
4
_Imaginary double
8
_Imaginary long double (SPARC)
16
_Imaginary long double (x86) -m32
12
_Imaginary long double (x86) -m64
16

E.1.14 ロケール固有の動作 (J.4)

ホスト環境の次の特性はロケール依存で、処理系で文書化する必要があります。

  • (5.2.1) 基本文字セット以外のソースおよび実行文字セットの追加メンバー。

    ロケール依存です。C ロケールでは、文字セットの拡張はありません。

  • (5.2.1.2) 基本文字セット以外の実行文字セットの追加の複数バイト文字の有無と意味、表現。

    デフォルトまたは C ロケールでは、実行文字セットに存在する複数バイト文字はありません。

  • (5.2.1.2) 複数バイト文字の符号化で使用するシフト状態。

    シフト状態はありません。

  • (5.2.2) 連続する印刷文字の出力方向。

    常に左から右に印刷されます。

  • (7.1.1) 小数点の文字。

    ロケール依存です (C ロケールでは、ピリオド「.」)。

  • (7.4, 7.25.2) 印刷文字セット。

    ロケール依存です (C ロケールでは、ピリオド「.」)。

  • (7.4, 7.25.2) 制御文字セット。

    制御文字セットは、水平タブ、垂直タブ、フォームフィード、アラート、バックスペース、復帰、改行で構成されます。

  • isalpha isblankislowerispunct isspaceisupperiswalpha iswblankiswloweriswpunct iswspaceiswupper 関数によるテスト対象の文字セット (7.4.1.2, 7.4.1.3, 7.4.1.7, 7.4.1.9, 7.4.1.10, 7.4.1.11, 7.25.2.1.2, 7.25.2.1.3, 7.25.2.1.7, 7.25.2.1.9, 7.25.2.1.10, 7.25.2.1.11)。

    isalpha() および iswalpha() と、前述の関係するマクロについては、isalpha(3C) および iswalpha(3C) のマニュアルページを参照してください。これらの動作はロケールを変更することによって変更されることがあります。

  • (7.11.1.1) ネイティブ環境。

    setlocale(3C) マニュアルページで説明しているように、ネイティブ環境は LANG および LC_* 環境変数で指定します。ただし、これらの環境変数が設定されていない場合は、C ロケールに設定されます。

  • (7.20.1, 7.24.4.1) 数値変換関数が受け付ける追加の変換対象シーケンス。

    基数文字はプログラムのロケールで定義され (LC_NUMERIC カテゴリ)、ピリオド (.) 以外のものに定義できます。

  • 実行文字セットの照合シーケンス (7.21.4.3, 7.24.4.4.2)。

    ロケール依存です。C ロケールでは、照合順序は ASCII の照合シーケンスと同じです。

  • (7.21.6.2) strerror 関数が作成するエラーメッセージ文字列の内容。

    アプリケーションが -lintl を付けてリンクされた場合、この関数が返すメッセージは LC_MESSAGES ロケールカテゴリで指定されたネイティブ言語になります。それ以外の場合は、C ロケールです。

  • (7.23.3.5, 7.24.5.1) 時間と日付の書式。

    ロケール固有です。C ロケールでの形式を次の表にまとめます。

    月の名前は次のとおりです。

表 E-5  月の名前
January
May
September
February
June
October
March
July
November
April
August
December

曜日の名前は次のとおりです。

表 E-6  曜日の名前と省略名
曜日名
省略名
Sunday Thursday
Sun Thu
Monday Friday
Mon Fri
Tuesday Saturday
Tue Sat
Wednesday
Wed

時間の書式は次のとおりです。

%H:%M:%S

日付の書式は次のとおりです。

%m/%d/ (-pedantic フラグを使用)

午前/午後を指定する書式は、次のとおりです。AM PM

  • (7.25.1) towctrans 関数がサポートする文字マッピング。

    プログラムのロケール (LC_CTYPE カテゴリ) 内の文字マッピング情報で定義される符号化文字セットの規則で、tolower および toupper 以外の文字マッピングを規定できます。使用可能なロケールとその定義の詳細は、『Oracle Solaris Internationalization Guide For Developers』を参照してください。

  • (7.25.1) iswctype 関数がサポートする文字分類。

    使用可能なロケールと規格外の予約文字の分類についての詳細は、『Oracle Solaris Internationalization Guide For Developers』を参照してください。