使用宏检查宏名称的预先存在

Ric*_*Bou 2 c macros directive c-preprocessor

我编写了一个包含几个包含数十个宏的头文件(.h).在每个宏之前我编写了这个:

#if defined (MACRO_NAME)
#warning "Macro name MACRO_NAME is already in use. Please rename the macro"
#endif
Run Code Online (Sandbox Code Playgroud)

为了提高代码的可读性,有一个宏可以完成所有检查工作,这将是很棒的,但宏内部不允许使用指令.

我想要这样的东西:

#define CHECK_MACRO_NAME(MACRO_NAME) \
    #if defined (MACRO_NAME) \
    #warning "Macro name "MACRO_NAME" is already in use. Please rename the macro" \
    #endif
Run Code Online (Sandbox Code Playgroud)

你知道其他(更好)的方式吗?

NPE*_*NPE 5

更好的方法可能是让编译器进行检查.

/* test.c */

#define MACRO

#define MACRO 1
Run Code Online (Sandbox Code Playgroud)

编译使用gcc:

$ gcc -c test.c
test.c:3:0: warning: "MACRO" redefined [enabled by default]
test.c:1:0: note: this is the location of the previous definition
Run Code Online (Sandbox Code Playgroud)