2009-07-05 9 views
15

私はAmayaを構築しようとしています。ビルドがC++プリプロセッサのデバッグ

error: expected unqualified-id before ‘(’ token

で失敗したとき、私は何が起こっていたか確認するためにコンパイルに失敗したファイルに(-Eで-cオプションを置き換える)のみプリプロセッサで++グラムを実行しました。これにより、80,000行のファイルが作成され、「Blue」が(2 < < 8)に置き換えられ、エラーを明確に説明しました。これを修正すると、ファイルは正常にコンパイルされます。私はそれで生きることができると思うが、なぜこれが起きているのかを知りたい。

プリプロセッサが特定の文字列(この場合は「ブルー」)を置き換える方法はありますか?

=================更新===================

まあ、私が見つけました犯人:

#undef blueを追加すると問題が解決しました。したがって、-Mとgrepの組み合わせを使用することはOKですが、時にはC++プリプロセッサの定義が実際のフォレストになることもあります。私は、もっと良い方法があるのか​​どうか、賢明なGNUツールがあるのか​​どうか不思議でした。

+0

どのプラットフォームですか? – laalto

+0

i686 GNU/Linux。 – Alex

答えて

3

(前処理されたファイルのソース行情報に基づいて)何も良く出ない人は、-Mオプションを使用して、ソースファイルに含まれるヘッダーのリストを取得し、 。私は、ある種の難読化では、これがあなたが探しているものを見つけられないことを意味することが予想されますが、通常はあなたはどこかの定義を上げます。通常は、少なくとも最初のカットとして、私の作品多年草

find /src -exec grep Blue {} /dev/null ';' 

と間違って何

+0

これは-E –

1

+0

でカバーする必要があります。grepのもう1つの場所は、/ usr/includeのようなシステムヘッダーです。 – laalto

+1

この場合、#defineはシステムディレクトリにあり、ソースディレクトリの下のファイルではありません – Alex

10

私は、前処理の問題をuntanglingに非常に有用であることが

g++ ... -dD -E $file > $file.ii 

を実行している見つけます。からman g++

-dD Dump all macro definitions, at the end of preprocessing, 
    in addition to normal output. 
+0

前処理中に構文エラーが検出された場合、-dDと-Eのどちらも出力されないことがありますが、これは少し不便です。 –