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

有两种方法:

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

或者

#if defined(MACRO)
// ...
#endif
于 2012-05-11T04:56:44.940 回答
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 回答
1

如果您希望在某些已定义或未定义的情况下停止编译,请使用 C 预处理器的#error指令。该页面的示例:

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

该消息将导致编译错误。

于 2012-05-11T04:58:12.443 回答