cpp(1) FreeBSD 一般コマンドマニュアル

cpp

前のページ 上に戻る 次のページ

cpp



書式

       cpp    [-$] [-Apredicate[(value)]] [-C]
              [-Dname[=definition]] [-dD] [-dM] [-I directory]
              [-H] [-I-] [-imacros file] [-include file]
              [-idirafter dir] [-iprefix prefix]
              [-iwithprefix dir] [-lang-c] [-lang-c++]
              [-lang-objc] [-lang-objc++] [-lint] [-M [-MG]]
              [-MM [-MG]] [-MD file ] [-MMD file ] [-nostdinc]
              [-nostdinc++] [-P] [-pedantic] [-pedantic-errors]
              [-traditional] [-trigraphs] [-Uname] [-undef]
              [-Wtrigraphs] [-Wcomment] [-Wall] [-Wtraditional]
              [infile|-] [outfile|-]


解説

       C プリプロセッサは、実際のコンパイルの前にプログラムを変換
       す る ために C コンパイラから自動的に利用される マクロプロ
       セッサです。長い記述を簡略してマクロとして定義することがで
       きるため、マクロプロセッサと呼ばれます。

       C プリプロセッサは、以下の4つの機能を提供します。

       o      ヘッ ダファイルを読み込みます。これはプログラムに組
              み込まれる (C 言語の)宣言の入ったファイルです。

       o      C 言語の任意の部分の省略形として マクロを定義 し、C
              プ リプロセッサがプログラム内の全てのマクロをその定
              義で置き換えます。

       o      条件文の処理をします。専用のプリプロセッサコマン ド
              を 用いて、いろいろな条件にしたがってプログラムの一
              部を含めたり除外したりできます。

       o      行番号の制御をします。ソースファイルとコンパイル さ
              れ た中間ファイルとを組み合わせたり再アレンジしたり
              するプログラムを用いる場合、コンパイラにオリジナ ル
              の ソースの何行目であるかを知らせるための、行番号制
              御のプリプロセッサコマンドを利用できます。

       C プリプロセッサは、そのインプリメントによって細かな部分に
       違いがいくつかあります。GNU C プリプロセッサの完全なドキュ
       メントは、 info ファイルの `cpp.info', もしくは、マニュ ア
       ル の  The  C  Preprocessor を 参 照して下さい。この双方は
       `cpp.texinfo'から生成されます。GNU C プリプロセッサは ANSI
       Standard C のスーパセットとなっています。

       ANSI  Standard C では、今日 C プログラムで一般的に用いられ
       ている多くの (無害な)構造が認められていません。この非互 換
       性 はユーザにとっては不便であり、そのため GNU C preproces-
       sor ではこの記述をデフォルトで受け付けるように作られていま
       す。 厳密にいえば、 ANSI Standard C にするためにはオプショ
       ンとして `-trigraphs', `-undef', `-pedantic'をつけなければ
       な りません。しかし経験則から、厳密な ANSI Standard C にあ
       す。infile が `-' であれば 標準入力からデータを読 み、out-
       file が `-' であれば標準出力へ結果を書きます。もし outfile
       もしくは両方のファイル名が省略された場合、省略されたファイ
       ルの代わりに標準入力と標準出力が使われます。


オプション

       以 下が C プリプロセッサが受け付けるオプションの一覧です。
       これらのオプションは、プリプロセッサがコンパイラから起動さ
       れ ている場合にも自動的に引き渡されるので、 C プログラムを
       コンパイルする際にも指定することができます。

       -P     `#'-行番号という行番号情報をプリプロセッサの出力 に
              含 めません。これは、C 以外の言語で行番号情報が含ま
              れているとエラーを起こす言語を処理する場合に有用 で
              しょう。

       -C      コ メ ントを削除せず、そのまま出力ファイルに含めま
              す。マクロ呼び出しの引数に現れるコメントはマクロ 呼
              び出しの展開後にコピーされます。

       -traditional
              ANSI ではなく、旧形式の C の文法として解釈します。

       -trigraphs
              ANSI 標準のトリグラフ(trigraph)構文を処理します。こ
              れは ANSI C で 1 文字を表示すると定められた `??' で
              始 まる 3 文字の並びです。例えば、`??/' は `\' を表
              しますので、`'??/n'' は改行文字の文字定数とな り ま
              す。 厳 密 に 言えば、GNU C プリプロセッサの `-tri-
              graphs' オプションは ANSI C 標準を完全にはサポー ト
              し ません。が、普通のユーザならばその違いに気づく事
              は稀でしょう。

              トリグラフについて、これ以上知りたいとは思わない で
              しょ?

       -pedantic
              `#else'  や `#endif' の後にコメント以外のテキストが
              つくといった場合に、 ANSI C 標準で求められる警告 を
              出力します。

       -pedantic-errors
              `-pedantic'  に似ていますが、警告ではなくエラーにし
              ます。

       -Wtrigraphs
              トリグラフがあると警告を出力します(ただし、トリグラ
              フの処理は行います)。

       -Wcomment

       -Wcomments
              ン は、指定したディレクトリがシステムのヘッダファイ
              ルが格納されているディレクトリよりも先に検索され る
              の で、ユーザ自身の作成したバージョンでシステムが提
              供するヘッダファイルを上書きさせることもできま す。
              1  つ以上の `-I' オプションを使用する場合、ディレク
              トリは左から右の順番で検索され、標準のシステム ヘッ
              ダファイルはその後になります。

       -I-    `-I-'  オプションよりも前に指定された `-I' オプショ
              ンで与えられたディレクトリは、`#include "file"'  の
              イ ン クルード文の場合にのみ検索されます。`#include
              <file>' では検索されません。

              オプション `-I-' の後のオプション `-I' に追加のディ
              レ クトリが指定された場合、それらのディレクトリは全
              ての `#include' 文で検索されます。

              付け加えて言うならば、`-I-' オプションを指 定 す る
              と、カレントディレクトリは `#include "file"' 文に対
              する最初の検索ディレクトリではなくなります。それ ゆ
              え、カレントディレクトリは明示的に `-I.' として指定
              された場合にのみ検索されることになります。 `-I-' と
              `-I.'  を双方とも指定することで、どのディレクトリが
              カレントディレクトリの前に、あるいは後に検索され る
              かを厳密に指定することができます。

       -nostdinc
              ヘッ ダファイルの検索に標準システムディレクトリを用
              いません。`-I' オプションで指定したディレ ク ト リ(
              と、もし適切であるならばカレントディレクトリ)が検索
              されます。

       -nostdinc++
              ヘッダファイルの検索に C++ 仕様の標準ディレクトリを
              用 いません。が、その他の標準ディレクトリは検索しま
              す。 (このオプションは libg++ の構築時に用いられ ま
              す。)

       -D name
               name を既定義のマクロとして、`1' に定義します。

       -D name=definition
                name をマクロとしてdefinition に定義します。defi-
              nition の内容に制限はありませが、プリプロセッ サ を
              シェ ルやシェルに類似したプログラムから起動している
              場合、シェルの文法上意味を持つスペースなどの文字 を
              保 護するため、そのシェルのクォート文法を使用する必
              要があります。もし、1 つの name に対して複数の `-D'
              を 指定したならば、もっとも右側の定義が有効となりま
              す。

       -U name
              す。

       -dM     プ リ プロセッサの結果を出力する代わりに、プリプロ
              セッサの実行中に定義された、既定義のものも含む全 て
              のマクロの `#define' コマンドのリストを出力します。
              これは、使用しているプリプロセッサのそのバージョ ン
              で、 どんなマクロが既定義であるかを知る方法を提供し
              てくれます。それには、空のファイル `foo.h' をこのオ
              プションで処理してみればよいのです。

              touch foo.h; cpp -dM foo.h

              はすべての既定義マクロの値を見せてくれるでしょう。

       -dD    `-dM'  に似ていますが、2 つの相違点があります。これ
              は既定義マクロを出力しません。また、`#define' コ マ
              ンドとプリプロセス結果の双方 を出力します。これらの
              出力は両方とも標準出力に行われます。


       -M [-MG]
              プリプロセスの結果を出力する代わりに、main のソース
              ファイルの依存性を記述するmake 規則を出力します。プ
              リプロセッサはソースファイルのオブジェクトファイ ル
              名、 コロン、そのすべてのインクルードファイル名から
              成るmake 規則を出力します。複数のインクルードファイ
              ル が あ る場合、規則は`\'-改行で複数行に区切られま
              す。

              `-MG' は、見つけられなかったヘッダファイルは(コンパ
              イルの途中で)生成され、ソースファイルと同じディレク
              トリに存在するものとして扱います。`-M' と共に指定し
              なければなりません。

              こ の 機 能は自動的に Makefile を更新するのに使いま
              す。

       -MM [-MG]
              これは `-M' に似ていますが、`#include "file"' で イ
              ン ク ル ー ド されるファイルのみを扱う点が異なりま
              す。`#include <file>' でインクルードされるシステ ム
              ヘッダファイルは無視されます。

       -MD file
              これも `-M' に似ていますが、依存情報が`file' に書き
              出されます。--`-MD' を指定したファイルの処理もこ れ
              に加えて行われ、`-M' のように通常の処理を抑制するこ
              とはありません。

              gcc を実行する場合は `file' 引数を指定してはいけ ま
              せ ん。gcc  は、入力ファイル名の末尾の `.c' を `.d'
              で置き換えたファイル名を出力に用いるからです。
              力 ファ イ ルを処理する前にその結果の出力を破棄しま
              す。 file によって生成される出力は捨 て ら れ る た
              め、`-imacros file' の処理結果の影響は、file 中に記
              述されたマクロがメインの入力ファイル中で使用可能 に
              な ることだけです。プリプロセッサは、`-imacrosfile'
              を処理する前に、コマンドラインから与えられた全て の
              `-D' や `-U' オプションを評価します。

       -include file
                ファ イ ル  file を、標準の入力ファイルの前に処理
              し、その結果出力をインクルードします。

       -idirafter dir
              ディレクトリ dir を第 2 インクルードパスに 加 え ま
              す。第 2 インクルードパス中のディレクトリは、メイン
              インクルードパス (オプション `-I' によって追加さ れ
              ま す) 中にヘッダファイルを探した結果発見できなかっ
              た場合に検索されます。

       -iprefix prefix
              prefix を、その後に続く `-iwithprefix' オプション用
              のプレフィックスとして使用します。

       -iwithprefix dir
              ディ レ クトリを第 2 インクルードパスに追加します。
              ディレクトリ名は prefixdir を連結することによっ
              て 得られます。ここで prefix は `-iprefix' オプショ
              ンによって指定されたものです。

       -lang-c

       -lang-c++

       -lang-objc

       -lang-objc++
              ソースの言語を指定します。`-lang-c++' は、プリプ ロ
              セッサに C++ のコメント文と、C++ 用の追加のデフォル
              トインクルードディレクトリを処理さ せ、`-lang-objc'
              は、Objective C の `#import' ディレクティブを使用可
              能にします。`-lang-c' は明示的にこれらの機能の切 り
              離しを指定し、`-lang-objc++' は双方を利用可能にしま
              す。

              これらのオプションはコンパイラドライバ gcc によって
              生 成されますが、`gcc' のコマンドラインから引き渡す
              ことはできません。

       -lint  コメント中に埋め込まれた、プログラムチェッカ   lint
              の コ マ ン ド を見つけ出し、それらの前に  `#pragma
              lint' を埋め込みます。 例 え ば、 コ メ ン ト   `/*
              NOTREACHED  */' は `#pragma lint NOTREACHED' になり

       info; The C Preprocessor, Richard M. Stallman.  中のエント
       リ `cpp'
       gcc(1); info; Using and Porting GNU CC (for version  2.0),
       Richard M. Stallman.  中のエントリ `gcc'


COPYING

       Copyright  (c)  1991, 1992, 1993 Free Software Foundation,
       Inc.

       Permission is granted  to  make  and  distribute  verbatim
       copies  of  this  manual provided the copyright notice and
       this permission notice are preserved on all copies.

       Permission is granted to copy and distribute modified ver-
       sions  of  this  manual  under the conditions for verbatim
       copying, provided that the entire resulting  derived  work
       is  distributed  under  the  terms  of a permission notice
       identical to this one.

       Permission is granted to copy and distribute  translations
       of this manual into another language, under the above con-
       ditions for modified versions, except that this permission
       notice  may  be  included  in translations approved by the
       Free Software Foundation instead of in  the  original  En-
       glish.



FreeBSD                   April 30, 1993                   cpp(1)

ABELNET VPSサービス