# マニュアルページ c89.1

## 名前

         c89 - 標準 C プログラムをコンパイル

## 形式

         c89 [-c] [-D name[=value]]...  [-E] [-g] [-I directory ]...
              [-L directory]...  [-o outfile] [-O] [-s]
              [-U name]... operand...

## 機能説明

         このリリースの c89 ユーティリティは、1997 年 2 月発行『  CAE
         Specification  』(Issue 5) の「Commands and Utilites」に準拠
         しています。

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

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

              $(basename pathname .c).o

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

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

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

              S_IRWXO | S_IRWXG | S_IRWXU

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

## オプション

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

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

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

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

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

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

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

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

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

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

                        次に示す事前定義された name はすべてのモー ド
                        で有効です。
                             __sparc (SPARC)
                             __i386 (x86)
                             __unix
                             __sun
                             __BUILTIN_VA_ARG_INCR
                             __SUNPRO_C=0x500
                             __SVR4

                        次に示す name は -Xc モードでは事前定義されて
                        いません。
                             unix
                             sparc (SPARC)
                             i386 (x86)
                             sun

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

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

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

         -O             最適化。

         -U name        名前 name の初期定義をすべて除去します。

         -D、 -I、 -U、および -L オプションは複数指定可能です。

## オペランド

         operand の書式は、パス名または -l library 形式です。パス名形
         式 の少なくとも 1 つのオペランドを指定しなければなりません。
         以下のオペランドがサポートされています。

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

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

         file.o         c89 -c により作成され、リンクエディタに直接渡
                        されるオブジェクトファイル。

         -l library     (-l の l は小文字の L ) 次の名前を持つライ ブ
                        ラリを検索します。

                             liblibrary.a

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

## 使用方法

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

         c89 は、 -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 を参照) は標準エラーには出力されません。

## 環境

         c89 の実行に影響を与える以下 の 環 境 変 数 に つ い て は、
         environ(5)  を 参 照してください。 LANG、 LC_ALL、 LC_TYPE、
         LC_MESSAGES、および NLSPATH。

         TMPDIR         存在すれば、一時ファイルのデフォルトディレ ク
                        トリに優先するパス名を指定します。

## 終了状態

         以下の終了値が返されます。

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

         >0  エラーが発生しました。

         c89 で、オブジェクトファイルが作成されないようなコンパイルエ
         ラーに遭遇すると、診断を標準エラーに出力して他のソースコード
         オペランドのコンパイルを継続しますが、リンクフェーズは実行せ
         ず、 0  以外の終了状態を返します。リンクエディタが成功しない
         と、診断メッセージが標準エラーに出力され、 c89 はゼロ以外 の
         状態で終了します。移植性のあるアプリケーションの場合は、実行
         可能ファイルの存在またはそのモードには依存せず、 c89 の終 了
         状態に依存する必要があります。

## 使用例

         使用例を次に示します。

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

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

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

         c89 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.a と libp.a の両方が同じディレ
         クトリに存在しているためです。
         ライブラリ名の衝突が発生する場合は、複数の -L オペランドを使
         用 す ることができます。前の例で、ユーザーが /a/a/a で新しい
         libp.a を使用するが、 /a/b/c/libQ.a からの f を使用する場 合
         は、次のようになります。

              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)

## 注意事項

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

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

         -l m        このライブラリは、 <math.h> で参照されるすべての
                     関 数 が含まれています。インプリメンテーションに
                     よって、このオペランドがなくてもこのライブラリを
                     検索するものもあります。

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

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

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

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

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

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

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