Manpages

名 称

cpp − GNU-C 互 換 の コ ン パ イ ラ プ リ プ ロ セ ッ サ

書 式

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つ の 機 能 を 提 供 し ま す 。

• ヘ ッ ダ フ ァ イ ル を 読 み 込 み ま す 。 こ れ は プ ロ グ ラ ム に 組 み 込 ま れ る

(C 言 語 の )宣 言 の 入 っ た フ ァ イ ル で す 。

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

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

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

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

ANSI Standard C で は 、 今 日 C プ ロ グ ラ ム で 一 般 的 に 用 い ら れ て い る 多 く の (無 害 な )構 造 が 認 め ら れ て い ま せ ん 。 こ の 非 互 換 性 は ユ ー ザ に と っ て は 不 便 で あ り 、 そ の た め GNU C preprocessor で は こ の 記 述 を デ フ ォ ル ト で 受 け 付 け る よ う に 作 ら れ て い ま す 。 厳 密 に い え ば 、 ANSI Standard C に す る た め に は オ プ シ ョ ン と し て ’−trigraphs’, ’−undef’, ’−pedantic’を つ け な け れ ば な り ま せ ん 。 し か し 経 験 則 か ら 、 厳 密 な ANSI Standard C に あ わ せ て こ う し た 設 定 を 行 な う と 支 障 の あ る 場 合 が 多 い こ と が わ か っ て い ま す 。 ほ と ん ど の 場 合 は 、 C プ リ プ ロ セ ッ サ は 明 示 的 に 実 行 す る 必 要 は あ り ま せ ん 。 C コ ン パ イ ラ が 自 動 的 に 実 行 し て く れ る か ら で す 。 し か し な が ら 、 明 示 的 に プ リ プ ロ セ ッ サ を 実 行 す る の が 有 効 な こ と が 個 々 に は あ り ま す 。

C プ リ プ ロ セ ッ サ は 、 引 数 と し て infileoutfileの 2 つ の フ ァ イ ル 名 を 期 待 し ま す 。 プ リ プ ロ セ ッ サ は ’#include’で 指 定 し た フ ァ イ ル と 一 緒 に infileを 読 み 込 み ま す 。 入 力 フ ァ イ ル の 組 み 合 わ せ で 作 ら れ た 出 力 は 、 全 て outfileに 書 か れ ま す 。

infileoutfile の 指 定 に ’’を 使 用 す る こ と が で き ま す 。 infile が ’’ で あ れ ば 標 準 入 力 か ら デ ー タ を 読 み 、 outfile が ’’ で あ れ ば 標 準 出 力 へ 結 果 を 書 き ま す 。 も し outfile も し く は 両 方 の フ ァ イ ル 名 が 省 略 さ れ た 場 合 、 省 略 さ れ た フ ァ イ ル の 代 わ り に 標 準 入 力 と 標 準 出 力 が 使 わ れ ま す 。

オ プ シ ョ ン

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

−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 イ ン ク ル ー ド パ ス に 追 加 し ま す 。 デ ィ レ ク ト リ 名 は 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’ に な り ま す 。 こ の オ プ シ ョ ン は 直 接 cpp を 呼 び 出 す 場 合 に の み 使 え ま す 。 gcc は 、 コ マ ン ド ラ イ ン か ら こ の オ プ シ ョ ン を 引 き 渡 し ま せ ん 。

−$ 識 別 子 中 で の

$’ の 使 用 を 禁 止 し ま す 。 こ れ は 、 標 準 が 修 正 さ れ る 以

前 は 、 C 標 準 へ の 厳 密 な 準 拠 の た め に あ り ま し た 。 本 オ プ シ ョ ン は 、 cpp を 直 接 呼 ぶ と き の み 使 用 可 能 で す 。 gcc は コ マ ン ド 行 か ら こ れ を 渡 し ま せ ん 。

関 連 項 目

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 versions 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 conditions for modified versions, except that this permission notice may be included in translations approved by the Free Software Foundation instead of in the original English.