| コマンド名称 |
cpp |
最終更新日 |
2008-08-31 |
| コマンド機能 |
GNU-C互換のコンパイラプリプロセッサ |
| 機能概要 |
Cプリプロセッサは以下の4つの機能を提供します
1.ヘッダファイルを読み込みます。これはプログラムに組み込まれる(C言語の)宣言の入ったファイルです
2.C言語の任意の部分の省略形としてマクロを定義し、Cプリプロセッサがプログラム内の全てのマクロをその定義で置き換えます
3.条件文の処理をします。専用のプリプロセッサコマンドを用いて、いろいろな条件にしたがってプログラムの一部を含めたり除外したりできます
4.行番号の制御をします。ソースファイルとコンパイルされた中間ファイルとを組み合わせたり再アレンジしたりするプログラムを用いる場合、コンパイラにオリジナルのソースの何行目であるかを知らせるための、行番号制御のプリプロセッサコマンドを利用できます |
| コマンドの由来 |
|
| RPMパッケージ名 |
cpp |
対象バージョン |
4.1.2 |
| コマンド書式 |
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|-] |
| オプション |
-P
‘#’-行番号という行番号情報をプリプロセッサの出力に含めません。これは、C 以外の言語で行番号情報が含まれているとエラーを起こす言語を処理する場合に有用でしょう
-C
コメントを削除せず、そのまま出力ファイルに含めます。マクロ呼び出しの引数に現れるコメントはマクロ呼び出しの展開後にコピーされます
-traditional
ANSI ではなく、旧形式の C の文法として解釈します
-trigraphs
ANSI標準のトリグラフ(trigraph)構文を処理します。これは ANSI C で1文字を表示すると定められた'??'で始まる 3 文字の並びです。例えば、'??/'は'\'を表しますので、'??/n'
は改行文字の文字定数となります。厳密に言えば、GNU C プリプロセッサの'-trigraphs'オプションは ANSI C 標準を完全にはサポートしません。が、普通のユーザならばその違いに気づく事は稀でしょう
-pedantic
'#else'や'#endif'の後にコメント以外のテキストがつくといった場合に、ANSI C 標準で求められる警告を出力します
-pedantic-errors
'-pedantic'に似ていますが、警告ではなくエラーにします
-Wtrigraphs
トリグラフがあると警告を出力します(ただし、トリグラフの処理は行います)
-Wcomment
-Wcomments
コメント開始シーケンスである'/*' がコメント中に存在したならば警告を発生します (両形式は同じ効果を持ちます)
-Wall
'-Wtrigraphs'と'-Wcomment'(ただし'-Wtraditional'は除く) を指定したのと同じです
-Wtraditional
ANSI と伝統派の C とで異なる振る舞いをとる構文が出現した場合に警告を発します
-I directory
ディレクトリ directory をヘッダファイルを検索するディレクトリリストの末尾に追加します。このオプションは、指定したディレクトリがシステムのヘッダファイルが格納されているディレクトリよりも先に検索されるので、ユーザ自身の作成したバージョンでシステムが提供するヘッダファイルを上書きさせることもできます。 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 に定義します。definition の内容に制限はありませが、プリプロセッサをシェルやシェルに類似したプログラムから起動している場合、シェルの文法上意味を持つスペースなどの文字を保護するため、そのシェルのクォート文法を使用する必要があります。もし、1
つの name に対して複数の'-D' を指定したならば、もっとも右側の定義が有効となります
-U name
name を定義しません。同一の name に対して'-U'と'-D'の双方が指定された場合、'-U'が'-D'に優先し、nameは定義されません
-undef
非標準のマクロを一切定義しません
-A name(value)
(#assert コマンドと同じ方法で) 述語 name にトークンリストvalueをアサートします。シェルのコマンドライン上では括弧をエスケープするなりクォートすることを忘れないで下さい
既定義のアサーション全てを取り消すのに、'-A-'を使えます。これはまた、既定義のマクロ全てを無効にします
-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' で置き換えたファイル名を出力に用いるからです
Mach では、make コマンドで便利なように複数のファイルを 1 つの依存規則ファイルにまとめるユーティリティ md が利用できます
-MMD file
'-MD' に似ていますが、ユーザのヘッダファイルのみを扱い、システムヘッダは無視する点が異なります
-H
通常の動作に加えて、使用されたヘッダファイルのファイル名を出力します
-imacros file
ファイル file を入力として処理しますが、標準の入力ファイルを処理する前にその結果の出力を破棄します。 file によって生成される出力は捨てられるため、'-imacros
file' の処理結果の影響は、file 中に記述されたマクロがメインの入力ファイル中で使用可能になることだけです。プリプロセッサは、'-imacrosfile'
を処理する前に、コマンドラインから与えられた全ての '-D' や '-U' オプションを評価します
-include file
ファイル file を、標準の入力ファイルの前に処理し、その結果出力をインクルードします
-idirafter dir
ディレクトリ dir を第 2 インクルードパスに加えます。第 2 インクルードパス中のディレクトリは、メインインクルードパス (オプション'-I'
によって追加されます) 中にヘッダファイルを探した結果発見できなかった場合に検索されます
-iprefix prefix
prefix を、その後に続く '-iwithprefix' オプション用のプレフィックスとして使用します
-iwithprefix dir
ディレクトリを第 2 インクルードパスに追加します。ディレクトリ名は prefix と dir を連結することによって得られます。ここで 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になります
このオプションは直接 cpp を呼び出す場合にのみ使えます。gcc は、コマンドラインからこのオプションを引き渡しません
-$
識別子中での '$' の使用を禁止します。これは、標準が修正される 以前は、C 標準への厳密な準拠のためにありました
本オプションは、 cpp を直接呼ぶときのみ使用可能です。 gcc はコマンド行からこれを渡しません |
| 引数 |
|
| 使用例 |
|