名 称
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 プ リ プ ロ セ ッ サ は 、 引 数 と し て infile と outfileの 2 つ の フ ァ イ ル 名 を 期 待 し ま す 。 プ リ プ ロ セ ッ サ は ’#include’で 指 定 し た フ ァ イ ル と 一 緒 に infileを 読 み 込 み ま す 。 入 力 フ ァ イ ル の 組 み 合 わ せ で 作 ら れ た 出 力 は 、 全 て outfileに 書 か れ ま す 。
infile と outfile の 指 定 に ’−’を 使 用 す る こ と が で き ま す 。 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 イ ン ク
ル ー ド パ ス に
追 加 し ま す 。
デ ィ レ ク ト リ
名 は 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 は コ マ ン ド 行 か ら こ れ を 渡 し ま せ ん 。
関 連 項 目
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.