2017-02-15 13 views
0

あなたはうまくいきたいと思います。 私は5つのファイルにversion.hのファイルを持っています。 SUB_VERSION2
version.hを:10:2:警告: - - :SUB_VERSION2
version.hを:10前処理を使用しているときのgccからの複数の警告の回避方法.h

version.hを::10:2:警告、私はコンパイルするとき は私が5回の警告を持っています:2:警告: - SUB_VERSION2
version.hを:10:2:警告: - SUB_VERSION2
version.hを:10:2:警告: - SUB_VERSION2

と私は持っていたいです1つの警告。私はしばらくの間、いくつかのウェブサイトを見ていると私はこの問題について何も見つかりません。この問題を避けるには?

は、ここに私の.hであると私.Cはランダムです:

#ifndef _VERSION_H 
#define _VERSION_H 

#define SUB_VERSION 1 
#define SUB_VERSION SUB_VERSION2 

#if (SUB_VERSION == SUB_VERSION2) 
    #ifndef WARNING_SUB_VERSION 
    #define WARNING_SUB_VERSION 
    #warning -- SUB_VERSION2 
    #endif 

#endif 
    #endif 
    #endif 

答えて

3

あなたがすることはできません。論理的には、各.cファイルは他と独立してコンパイルされます。これは、あるヘッダファイルに含まれるヘッダファイルから警告を発行することはできず、他のヘッダファイルでは抑制されていないことを意味します。

+0

あなたの診断は確かに正しいと思われますが、「あなたはできない」という結論は、どのような解決策を検討すべきかに関するいくつかの前提のない仮定に依存しなければなりません。 –

+0

あなたのフィードバックのためにありがとう。私の問題を解決するためのアドバイスはありますか? – ruxob

+0

私の前提は、OPが同じ.hファイルを含む複数の.cファイルのシナリオを変更したくないということでした。 OPがそれを変更する準備ができていれば(あなたの答えのように)、物事が変わります。しかし、私はOPが何らかのプリプロセッサの魔法を探していたと感じています。もしそうなら: "できません"。 –

0

ヘッダーに適切な複数の包含ガードがある場合は、複数の翻訳単位(大まかに、別々のCソースファイルから)のコンパイルから複数の警告が発生する必要があります。各翻訳単位は独立してコンパイルされるため、複数の警告が必要です。

すべてのソースを1つの翻訳単位にまとめることで、警告の数を1つに減らすことができますが、特に推奨しません。

コードの構造に関連するその他の可能性があります。例えば、マクロを使用して、特定の翻訳単位(おそらくmain()を含むもの)を指定するためのプリプロセッサ条件があります。しかし、このようなアプローチは脆弱ですが、私はそれらをお勧めしません。

あなたの最良のオプションは、おそらく複数の警告を表示したり、それらを完全に抑制したりすることです。

関連する問題