0

コードの一部で、マクロが定義されているとしましょう。コンパイル中に、それが定義され、使用されているかどうかを知りたいです。どうすればこれを行うことができますか?

4

4 に答える 4

4

ディレクティブで確認し、#ifndefディレクティブでエラーをスローします#error

#ifndef A_MUST_HAVE_MACRO
#error "A must have macro not defined"
#endif
于 2012-05-11T04:58:58.583 に答える
2

gccコンパイラを使用している場合は、-Eオプションを使用して、使用されているかどうか(および、間接的に定義されているかどうか)を確認できます。gccのマニュアルページには次のように書かれています。

   -E  Stop after the preprocessing stage; do not run the compiler proper.  
   The output is in the form of preprocessed source code, which is sent 
   to the standard output.  Input files which don't require preprocessing 
   are ignored.

他のコンパイラにも同様のオプションがあると思います。前処理段階(マクロが置き換えられる場所)の後で停止するオプションを見つけてください。

于 2012-05-11T05:00:05.827 に答える
2

2つの方法があります:

#ifdef MACRO
// ... (code here will only be compiled if macro is defined)
#endif

また

#if defined(MACRO)
// ...
#endif
于 2012-05-11T04:56:44.940 に答える
1

何かが定義されているか定義されていない場合にコンパイルを停止する場合は、Cプリプロセッサの#errorディレクティブを使用してください。そのページの例:

 #ifdef __vax__
 #error "Won't work on VAXen.  See comments at get_last_object."
 #endif

そのメッセージでコンパイルエラーが発生します。

于 2012-05-11T04:58:12.443 に答える