Oracle Solaris Studio 12.4 Man Pages

印刷ビューの終了

更新: January 2015
 
 

c99(1)

名前

c99 - 標準 C プログラムをコンパイルする

形式

c99  [-c]  [-Dname[=tokens]]   [-E]   [-g]   [-Idirectory]
     [-Ldirectory] [-Ooptlevel] [-ooutfile] [-s] [-Uname]

説明

このリリースの c99 ユーティリティーは、2001 年 9 月 12 日発行 『Standard for Information Technology - Portable Operating System Interface (POSIX(R)) Shell and Utilities』Issue 6 (Volume 1: A to J) に準拠しています。

c99 ユーティリティーは、標準 C コンパイルシステムへのインタフェースです。このユーティリティーは ISO C 標準に準拠したソースコードを受け取ります。このシステムは概念的にはコンパイラとリンカーで構成されます。operand で参照されたファイルのコンパイルとリンクを行なって実行可能ファイルを作成します。

-c オプションが指定されると、file.c という形式のすべてのパス名オペランドについて、ファイル

$(basename pathname .c).o

が、コンパイルの正常終了時に作成されます。

リンクエディットを禁止するオプション (-c-E など) がない場合、すべてのオペランドのコンパイルとリンクがエラーを発生せずに終了すると、作成された実行可能ファイルは -o outfile オプションが指定されていれば outfile に出力され、指定されていなければファイル a.out に出力されます。

作成された実行可能ファイルのファイルアクセス権は

S_IRWXO | S_IRWXG | S_IRWXU

に設定され、そのプロセスの umask で指定されたビットはクリアされます。

オプション

c99 ユーティリティーのオプションは、次の影響を受けます。

  • -l library オペランドはオプションの形式になっていますが、オペランドのリストにおけるその位置はライブラリの検索順序に影響を与えます。

  • -I および -L オプションの指定順序には意味があります。

  • 移植性のあるアプリケーションの場合は、各オプションを別々に指定する必要があります。グループ化されたオプション (たとえば、-cO) は、すべての実装で認識されるとは限らないからです。

次のオプションがサポートされています。

-c

コンパイルのリンクエディットのフェーズを抑制し、作成されたオブジェクトファイルを削除しません。

-D name[=value]

C 言語の #define 指令と同様に name を定義します。=value が指定されていない場合は、値 1 が使用されます。-D オプションの優先度は、-U オプションよりも低くなっています。つまり、name-U-D の両方のオプションで使用された場合、name はオプションの順序にかかわらず未定義となります。c99 は少なくとも 2048 バイトの -D 定義および 256 個の name をサポートします。

次に示す事前定義された name はすべてのモードで有効です。

__sparc (SPARC)
__i386 (x86)
__unix
__sun
__BUILTIN_VA_ARG_INCR
__SUNPRO_C=0x500
__SVR4

次の name は事前定義されていません。

unix
sparc (SPARC)
i386 (x86)
sun
-E

C 言語のソースファイルを標準出力にコピーし、すべてのプリプロセッサ指令を展開します。コンパイルは行いません。テキストファイル以外のオペランドがあると、エラーが発生します。

-g

オブジェクトファイルまたは実行可能ファイルにシンボリック情報を作成します。

-I directory

絶対パス名以外の名前を持つヘッダーを探すためのアルゴリズムを変更し、通常の場所で検索する前に directory パス名で指定されたディレクトリを検索します。したがって、二重引用符 ("") で囲まれた名前を持つヘッダーは、その #include 行を含むファイルの存在するディレクトリで最初に検索され、次に -I オプションで指定されたディレクトリで検索され、最後に通常の場所で検索されます。山括弧 (<>) で囲まれた名前を持つヘッダーの場合は、-I オプションで指定されたディレクトリでのみ検索され、次に通常の場所で検索されます。-I オプションで指定したディレクトリは、指定順に検索されます。

-L directory

-l オブジェクトで指定したライブラリを探すためのアルゴリズムを変更し、通常の場所で検索する前に directory パス名で指定されたディレクトリを検索します。-L オプションで指定したディレクトリは、指定順に検索されます。

-O optlevel

コードの最適化レベルを指定します。optlevel オプション引数が数字の 0 の場合、特別なコードの最適化はすべて無効になります。最適化レベルについては、cc(1) のマニュアルページを参照してください。

-o outfile

作成される実行可能ファイルのパス名として、デフォルトの a.out ではなく outfile を使用します。このオプションは、-c または -E とともに使用することはできません。

-s

オブジェクトファイルまたは実行可能ファイル、あるいはその両方を作成し、そのファイルから、exec ファミリによる実行では必要ないシンボリック情報やその他の情報を除去します。-g オプションと -s オプションの両方が指定されている場合は、-s-g をオーバーライドします。

-U name

name の初期定義をすべて削除します。

-D-I-U、および -L オプションは、それぞれ複数個指定できます。

オペランド

operand は、パス名形式または -l library 形式です。パス名形式のオペランドを少なくとも 1 つ指定する必要があります。次のオペランドがサポートされています。

file.c

コンパイルと、オプションのリンクを行う C 言語のソースファイル。-c オプションを使用する場合、オペランドはこの形式でなければなりません。

file.a

通常は ar(1) ユーティリティーで作成され、リンカーに直接渡されるオブジェクトファイルのライブラリ。

file.o

c99 -c により作成され、リンカーに直接渡されるオブジェクトファイル。

-l library

(小文字のエル)liblibrary.a という名前のライブラリを検索します。

ライブラリは、その名前が見つかったときに検索されるため、-l オペランドの配置は重要です。このようにして、いくつかの標準ライブラリを指定できます。後述の注記の「標準ライブラリ」を参照してください。

使用法

c99 ユーティリティーは通常、コンパイル中にカレントディレクトリにファイルを作成するため、c99 ユーティリティーはファイル作成が可能なディレクトリで実行する必要があります。

c99 は、-c が指定されず、複数のソースファイルが与えられた場合に .o ファイルを作成します。

旧来の一部の実装では、-L オプションと -l オペランドをコマンド行上で散在的に指定できていました。このような動作を行わないシステム上で整合性のあるアプリケーションのコンパイルを行うためには、移植性のあるアプリケーションではすべての -L オプションをあらゆる -l オプションよりも前に指定する必要があります。

ユーザーが (暗黙的な -l c または明示的な -l m によって検出される前に) 標準ライブラリ関数の代替バージョンを指定した場合は、これらのバージョンが標準バージョンの代わりに使用されると考えられるかもしれません。これが真とならない理由があるため (関数をマクロとして定義、クリーンな名前空間の操作など)、-L ディレクトリ内に標準ライブラリと同様の名前のファイルを存在させると、予期しない動作をする可能性があるということを明言しておきます。

環境変数 TMPDIR の設定は、デフォルトの一時ディレクトリをオーバーライドします。

出力

出力

STDOUT

.c で終了するファイルオペランドが複数指定された場合、その各ファイルについて、

"%s:\n", <file>

が書き込まれる場合があります。これらのメッセージは、書き込まれる場合、各入力ファイルの処理に先行します。このようなメッセージが標準エラーに書き込まれる場合 (STDERR を参照) は、標準出力には書き込まれません。

-E オプションが指定された場合、標準出力は言語の前処理段階の結果を示すテキストファイルとなります。このファイルには、以降のコンパイル段階のための付加情報が含まれることがあります。

STDERR

診断メッセージにのみ使用されます。.c (またはほかの不特定の接尾辞) で終了するファイルオペランドが複数指定された場合、その各ファイルについて、

"%s:\n", <file>

が書き込まれる場合があり、どの入力ファイルに対する診断および警告メッセージかを識別できます。これらのメッセージは、書き込まれる場合、各入力ファイルの処理に先行します。このようなメッセージが標準出力に書き込まれる場合 (STDOUT を参照) は、標準エラーには書き込まれません。

環境変数

環境

c99 の実行に影響を与える次の環境変数についての詳細は、environ(5) を参照してください。LANG、LC_ALL、LC_TYPELC_MESSAGES、および NLSPATH

TMPDIR

一時ファイルのデフォルトディレクトリをオーバーライドするパス名を指定します (存在する場合)。

終了ステータス

次の終了値が返されます。

0

コンパイルまたはリンクエディットが成功しました。

>0

エラーが発生しました。

c99 は、オブジェクトファイルが作成されないようなコンパイルエラーが発生すると、診断を標準エラーに書き込み、ほかのソースコードオペランドのコンパイルを継続しますが、リンクフェーズは実行せず、ゼロ以外の終了ステータスを返します。リンクエディットが失敗すると、診断メッセージが標準エラーに書き込まれ、c99 はゼロ以外のステータスで終了します。移植性のあるアプリケーションは、実行可能ファイルの存在またはそのモードには依存せず、c99 の終了ステータスに依存する必要があります。

使用例を次に示します。

c99 -o foo foo.c

foo.c をコンパイルし、実行可能ファイル foo を作成します。

c99 -c foo.c

foo.c をコンパイルし、オブジェクトファイル foo.o を作成します。

c99 foo.c

foo.c をコンパイルし、実行可能ファイル a.out を作成します。

c99 foo.c bar.o

foo.c をコンパイルし、それを bar.o とリンクし、実行可能ファイル a.out を作成します。また、foo.o を作成し、それを残します。

次の例で、-L オプションと -l オペランドの使用方法および関係を示します。モジュール a.c がライブラリ libQ.a 内の関数 f を呼び出し、またモジュール b.c がライブラリ libp.a 内の関数 g を呼び出す場合を考えてみます。両方のライブラリが /a/b/c に存在するとします。希望する方法でコンパイルとリンクを行うためのコマンド行は、次のようになります。

c89 -L /a/b/c main.o a.c -l Q b.c -l p

この場合、-l Q オペランドは、最初の -l p オペランドのみに先行している必要があります。それは、libQ.alibp.a の両方が同じディレクトリに存在しているためです。ライブラリ名の競合が発生する場合は、複数の -L オペランドを使用できます。前の例で、ユーザーが /a/a/a にある新しい libp.a を使用するが、/a/b/c/libQ.af を引き続き使用する場合は、次のようになります。

c89 -L /a/a/a -L /a/b/c main.o a.c -l Q b.c -l p

この例では、リンカーは指定された順に -L オプションを探し、b.c の参照を解決するときに /a/a/a/libp.a/a/b/c/libp.a よりも先に検出します。ただし、-l オペランドの順序も重要です。

関連項目

ar(1), cc(1B), nm(1), strip(1), umask(1), environ(5)

標準ライブラリ

c99 ユーティリティーは、標準ライブラリのための次に示す -l オペランドを認識します。

-l c

このライブラリには、<math.h> に存在しているものとしてリストされている関数を除く、すべてのライブラリ関数が含まれています。このオペランドは、このライブラリを検索させるために必須ではありません。

-l m

このライブラリには、math.h で参照されるすべての関数が含まれています。実装によっては、このオペランドがなくてもこのライブラリを検索する場合があります。

-l l

このライブラリには、lex の C 言語出力で必要となる関数のうち、-l c オペランドを通して使用できないがものすべてが含まれています。

-l pthread

このオペランドは、<pthread.h> で参照されているすべての関数と、<unistd.h> で参照されている pthread_atfork() を認識可能にします。実装によっては、このオペランドがなくてもこのライブラリを検索する場合があります。

-l rt

このオペランドは、<aio.h><mqueue.h><sched.h>、および <time.h> で参照されているすべての関数を認識可能にします。実装によっては、このオペランドがなくてもこのライブラリを検索する場合があります。

-l y

このライブラリには、yacc の C 言語出力で必要となる関数のうち、-l c オペランドを通して使用できないがものすべてが含まれています。

リンカーの呼び出しを禁止するオプション (-c-E など) がない場合、c99 ユーティリティーは、-l c オペランドに相当する部分を最終 -l オペランドとしてリンカーに渡します。そのため、これはほかのすべてのオブジェクトファイルおよびライブラリがロードされたあとで検索されます。

外部シンボル

C コンパイラおよびリンカーは、少なくとも 31 バイトまでの長さを持つ外部シンボルの有効性をサポートします。

コンパイラおよびリンカーは、各ソースファイルまたはオブジェクトファイルごとに少なくとも 511 個の外部シンボル、合計で少なくとも 4095 個の外部シンボルをサポートします。制限を超えると、診断メッセージが標準出力に書き込まれます。