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

印刷ビューの終了

更新: 2014 年 12 月
 
 

6.7.2 実装で使用される予約名

ISO C 規格は、そのライブラリに関する実装に対して、より多くの制限を課しています。過去において、ほとんどのプログラマは UNIX システムでは独自の関数に readwrite などの名前を使用しないようにしていました。ISO C は、規格で予約されている名前だけが実装内の参照で導入されることを要求しています。

したがって規格では、実装で使用する可能性があるすべての名前のサブセットが予約されています。この名前のクラスは下線で始まり、もう 1 つの下線または大文字の英字が続く識別子から構成されます。この名前のクラスは、次の正規表現に一致するすべての名前を含みます。

_[_A-Z][0-9_a-zA-Z]*

厳密には、プログラムがこのような識別子を使用する場合、その動作は未定義です。したがって、_POSIX_SOURCE (または、_XOPEN_SOURCE) を使用するプログラムの動作は未定義です。

ただし、未定義の動作は程度の問題です。POSIX 準拠の実装で _POSIX_SOURCE を使用する場合、プログラムの未定義の動作は特定のヘッダー内に追加された特定の名前から構成されていても、受け入れられる標準にプログラムは準拠しています。ISO C 規格におけるこの故意の抜け道により、実装は外見上互換性のない仕様に準拠できます。一方、POSIX 規格に準拠しない実装は、_POSIX_SOURCE などの名前に遭遇したとき、任意の方法で動作できます。

規格では、下線で始まるほかのすべての名前が (局所的なスコープではなく) ヘッダーファイルにおける通常のファイルのスコープの識別子として、および構造体と共用体のタグとして使用するために予約されています。従来通り、_filbuf_doprnt という名前の関数によりライブラリの隠れた部分を実装することはできます。