2016-12-09 13 views
1

不可能な状況を避けるために、問題を2つに減らすことができます。Cファイルが依存する定義済みのマクロを確認するツールはありますか?

ケース1

最初の(最も簡単な)場合は、プリプロセッサはそれを検出する機会を持っている状況で、それはそれは最初の前に定義されている(事前に定義されたマクロに依存プリプロセッサディレクティブがありますです入力行)かどうかを判断する。例えば:

#ifdef FOO 
#define BAR 42 
#else 
#define BAR 43 
#endif 

FOOが予め定義されているかどうかに依存します。ただし、ファイル

#undef FOO 

#ifdef FOO 
#define BAR 42 
#endif 

はありません。より難しいケースは、依存関係が実際に問題であるかどうかを検出することです(上記の場合はFOOまたはBARのいずれも出力に影響しません)。成功したコンパイルが事前定義されたマクロに依存する


ケース2

秒(硬い)場合である:プリプロセッサはかどうか懸念しているように完全に細かい限りある

INLINE int fubar(void) { 
    return 42; 
} 

ENTRY_POINTはあらかじめ定義されていますが、INLINEが慎重に定義されていないと、コードはコンパイルされません。同様に、出力が影響を受けない場合を除外することも可能ですが、その例は見つけられません。 1は、おそらくシンボルが正常にコンパイルするためには事前に定義する必要がある場合にそれを制限する必要がありますので、

int fubar(void) { 
    return 42; 
} 

fubar事前に定義されているが、これをうまくコンパイルを変更することができます:ここでの合併症は、一例ではということです。


このようなツールは、プリプロセッサ(と2番目のケースのCパーサー)に似ていると思います。問題はそのようなツールがあるかどうかです。または、最初のケースだけを扱うツールがありますか?それとも全く?

+0

ツールレックは話題にはなりませんが、一般的に、あなたはそれを知っていますよね? –

+0

@SouravGhoshこれは、ツールの推奨事項ではなく、ツールの存在です(ただし、例では肯定的な回答をサポートする必要があります)。 – skyking

+0

これをツールレックの質問としてクローズすることを推奨した人には:ツールレックの質問であるためには、少なくとも** 2つの**ツール(質問に答える)が必要です。このようなツールが1つしかない場合は、お勧めはあまりありませんし、お勧めするツールがない場合は、これはツールの問題であるというあなたの主張を支持しているとはまだ考えていますか?もしあなたがそうしたら、私は彼らが質問に答えてくれるのを見たいと思います。 – skyking

答えて

0

Cではすべてを(再)定義することができるため、あらかじめ(再)定義されていることを事前に知る方法はありません。通常、いくつかの命名規則は、マクロ(大文字のようなもの)の意味を理解するのに役立ちます。したがって、そのようなツールを持つことはできません。もちろん、マクロ定義が見つからないことが原因でコンパイルエラーが発生した場合は、それらを使用して欠落しているものを分析することができます。

関連する問題