JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.3: C ユーザーガイド     Oracle Solaris Studio 12.3 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  C コンパイラの紹介

2.  C コンパイラ実装に固有の情報

3.  C コードの並列化

4.  lint ソースコード検査プログラム

5.  型に基づく別名解析

6.  ISO C への移行

6.1 基本モード

6.1.1 -Xc

6.1.2 -Xa

6.1.3 -Xt

6.1.4 -Xs

6.2 新しい形式の関数プロトタイプ

6.2.1 新しいコードを書く

6.2.2 既存のコードを更新する

6.2.3 併用に関する考慮点

6.3 可変引数を持つ関数

6.4 拡張: 符号なし保存と値の保持

6.4.1 若干の背景となる歴史

6.4.2 コンパイルの動作

6.4.3 例: キャストの使用

6.4.4 例: 同じ結果、警告なし

6.4.5 整数定数

6.4.6 例: 整数定数

6.5 トークン化と前処理

6.5.1 ISO C の翻訳段階

6.5.2 古い C の翻訳段階

6.5.3 論理的なソース行

6.5.4 マクロ置換

6.5.5 文字列の使用

6.5.6 トークンの連結

6.6 const と volatile

6.6.1 lvalue 専用の型

6.6.2 派生型の型修飾子

6.6.3 const は readonly を意味する

6.6.4 const の使用例

6.6.5 volatile の使用例

6.7 複数バイト文字とワイド文字

6.7.1 アジア言語は複数バイト文字を必要とする

6.7.2 符号化の種類

6.7.3 ワイド文字

6.7.4 C 言語の機能

6.8 標準ヘッダーと予約名

6.8.1 標準ヘッダー

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

6.8.3 拡張用の予約名

6.8.4 安全に使用できる名前

6.9 国際化

6.9.1 ロケール

6.9.2 setlocale() 関数

6.9.3 変更された関数

6.9.4 新しい関数

6.10 式のグループ化と評価

6.10.1 式の定義

6.10.2 K&R C の再配置の権利

6.10.3 ISO C の規則

6.10.4 括弧の使用

6.10.5 as if 規則

6.11 不完全な型

6.11.1 型

6.11.2 不完全な型を完全にする

6.11.3 宣言

6.11.4 式

6.11.5 正当性

6.11.6 例: 不完全な型

6.12 互換型と複合型

6.12.1 複数の宣言

6.12.2 分割コンパイル間の互換性

6.12.3 単一のコンパイルでの互換性

6.12.4 互換ポインタ型

6.12.5 互換配列型

6.12.6 互換関数型

6.12.7 特別な場合

6.12.8 複合型

7.  64 ビット環境に対応するアプリケーションへの変換

8.  cscope: 対話的な C プログラムの検査

A.  機能別コンパイラオプション

B.  C コンパイラオプションリファレンス

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

D.  C99 の機能

E.  ISO/IEC C90 の処理系定義の動作

F.  ISO C データ表現

G.  パフォーマンスチューニング

H.  Oracle Solaris Studio C: K&R C と ISO C の違い

索引

6.8 標準ヘッダーと予約名

標準化作業の初期の段階において ISO 規格委員会は、ライブラリ関数、マクロ、およびヘッダーファイルを ISO C の一部として含むことを選択しました。

この節では、さまざまな予約名のカテゴリとその予約名が必要な基本的な理由を示します。最後には、プログラムで予約名を使用しないようにするための規則を示します。

6.8.1 標準ヘッダー

標準ヘッダーは次のとおりです: assert.h、 ctype.h、 errno.h、 float.h、 limits.h、 locale.h、 math.h、 setjmp.h、 signal.h、 stdarg.h、 stddef.h、 stdio.h、 stdlib.h、 string.h、 time.h。

ほとんどの実装は、さらに多くのヘッダーを提供しています。しかし、1990 ISO/IEC C に厳密に準拠するプログラムが使用できるヘッダーは、記載されたものだけです。

これらヘッダーの一部の内容については、ほかの規格ではわずかに異なります。たとえば、POSIX (IEEE 1003.1) は、fdopen を stdio.h で宣言するように指定しています。これら 2 つの規格が共存するために、POSIX では、このような追加の名前が存在することを保証するためには任意のヘッダーをインクルードする前にマクロ _POSIX_SOURCE を #defined で定義しなければならないと規定しています。また、『X/Open Portability Guide』でも、その拡張のためにこのマクロ方式を使用しています。X/Open のマクロは _XOPEN_SOURCE です。

ISO C は、標準ヘッダーがそれ自身だけで完結し、べき等 (何度指定しても同じ) であることを要求しています。どの標準ヘッダーも、その前後でほかのヘッダーを #included でインクルードする必要はありません。標準ヘッダーは何度 #included でインクルードしても、問題は発生しません。ISO C 規格では、安全なコンテキストにおいてのみ、標準ヘッダーを #included でインクルードすることを要求します。したがって、ヘッダーで使用される名前は変更されないことが保証されます。

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

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

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

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

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

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

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

6.8.3 拡張用の予約名

明示的に予約されたすべての名前に加えて、1990 ISO/IEC C 規格は、次の特定のパターンに一致する名前も実装用および将来の規格用として予約しています。

表 6-2 拡張用の予約名

ファイル
予約名のパターン
errno.h
E[0-9A-Z].*
ctype.h
(to|is)[a-z].*
locale.h
LC_[A-Z].*
math.h
現在の関数名[fl]
signal.h
(SIG|SIG_)[A-Z].*
stdlib.h
str[a-z].*
string.h
(str|mem|wcs)[a-z].*

このリストにおいて、大文字の英字で始まる名前はマクロで、関連するヘッダーがインクルードされるときだけ予約されます。残りの名前は関数を示し、大域的なオブジェクトや関数を指定する場合には使用できません。

6.8.4 安全に使用できる名前

ISO C の予約名と衝突しないようにするために従うことのできる 4 つの簡単な規則です。

ほとんどの実装はデフォルトで標準ヘッダーに名前を追加しているため、これらの規則は一般的なガイドラインに過ぎません。