2016-06-21 2 views
-1

私はGCCを使っていくつかのCファイルを前処理しています。GCC前処理:放置しておきます。ゼロ値を仮定しない条件式

Examplesource:

#define A 1 
#define B 0 

#if A && B > 0 
    bla() 
#else 
    #if C == 0 
    foo() 
    #else 
    foo2() 
    #endif 
    foo3() 
#endif 

私がコメント(-CC)を出て、マクロ(-fdirectives-only)を介して動作しないバッチファイルからこれを実行している:

gcc -E -CC -fdirectives-only -Wundef infile.c > outfile.c 

それは私に次のような出力を提供します上記の例では、自動的にC = 0とみなされます。

foo() 
foo3() 
#if C == 0 
    foo() 
    #else 
    foo2() 
    #endif 
    foo3() 

それを行うにはどのような方法があります:は、私は(NO仮定は、GCCによって取られていない)、以下の出力をしたいと思いますか?私はそれがGCC SHOULDの仕組みを知っていますが、手作業で行うこともできます。

私が知っている、代替COANは、これが可能になるだろう - しかし、私は事前に:-(

おかげ


私は#を意図SORRY GUYSを、それを使用することはできませんよ! MY SOURCE & B. EDITEDを定義

+0

前処理行は、他のソースがコンパイルされる前に処理されます。 '#if A && B> 0 'の' A'と 'B'は' A = 1'や 'B = 0'ソース行とは何の関係もありません。 '#define'でない名前はプリプロセッサ演算のために' 0'に置き換えられています。 –

+0

入力と出力が一致しません。私はいくつかのコピー/ペーストエラーが疑わしい。 – gnasher729

+0

ちょうど 'A = 1'と' B = 0'は何ですか?有効ではありません。 – Lundin

答えて

1

いいえ、いくつかのサードパーティ製アプリケーションなしでこれを行う方法はありません。どちらもGCCも打ち鳴らすには、サードパーティ製のツールが存在する理由であるこの機能は、含まれています。

関連する問題