2017-09-07 6 views
-3

私は2つのものを持っています: 同じもののライブラリファイルとヘッダー。 ソースファイルにアクセスできません。私ができることは、アプリケーション用にコンパイルされたライブラリを使用することだけです。このために、main.cファイルにヘッダファイルを指定します。私はapplication.hを含む午前application.cファイルでヘッダーファイルを変更せずにアプリケーションコード内のマクロを定義解除するにはどうすればよいですか?

application.h

#define TEST 

を: ヘッダ内のコード(application.h)は以下のようにマクロTESTを指定貸し付け私が持っているヘッダー:私のmain.cファイルで今すぐ

#ifdef TEST 
{ 
do this 
} 
#else 
{ 
do something else 
} 

私は、ヘッダapplication.hを含めますマクロTESTを使用するつもりはないので、定義を解除します。 明らかに、私はapplication.hファイルで定義を解除することができます。しかし、私はそれをしたくありません。私はそれが動作しないプログラムを実行すると、

main.cの

#include"application.h" 
#undef TEST 

私はこれを試してみました:main.cの中でこのような 何かをマクロを未定義にする方法はあります。 application.hファイルを変更せずにこれを達成する方法はありますか?

+6

「動作しない」とはどういう意味ですか? '#undef' *を使うことは、マクロの定義を解除する方法です。 '#undef'の後に他のヘッダファイルをインクルードしていますか?それには' 'application.h ''が含まれていますか? –

+4

あなたのメークファイル/プロジェクトファイルに定義するか、定義しないでください – sp2danny

+2

[MCVE]を入力してください。ここに表示されている内容が正しいと思われます。 –

答えて

0

ご質問のとおり、main.cを変更する場合は、application.cまたはapplication.hに触れないでください。

application.cにはapplication.hが含まれていれば、私が知る限り、何もundefすることはできません。 application.cmain.cは異なるコンパイル単位であり、定義はプリプロセッサによってコンパイル単位レベルで計算されます。

application.hに無条件のdefineがある場合は、それを使用する必要があります。

+0

ありがとうございます。しかし、main.cのMacroにアクセスしているので、私はそれを定義解除できないはずですか?私ははっきりしていません。 – abhinandanbr

+0

'main.c'でundefを実行すると、' main.c'でundef'edされます。 'application.c'にはまったく影響しません。あなたが 'main.c'でそれを削除したいならば、あなたの解決策はうまくいくはずです。異なる* .cファイルを完全に別々に扱います。それらは個別にコンパイルされます。 –

関連する問題