C定义宏,第一次使用时扩展不一样

C define macro that expands not the same when not used for the first time

是否可以这样写:

#define FIRST_DEF 1
#define SECOND_DEF 2    

#ifndef ALREADY_DEFINED
#define MY_MACRO FIRST_DEF
#define ALREADY_DEFINED
#else
#define MY_MACRO SECOND_DEF
#endif

所以 MY_MACRO 在第一次使用时不具有相同的值?

所以写作:

int a = MY_MACRO;
int b = MY_MACRO;

扩展为:

int a = 1;
int b = 2;

如果不行,有什么办法吗? (我知道这个例子很傻,但这只是为了让问题更清楚。)

是的。我觉得还行。

#include "xxx.h"
// FIRST_DEF here
#include "xxx.h"
// SeCOND_DEF here

但是您必须包含 header 两次

对于您的示例,您可以使用预定义的宏 __COUNTER__,它会在每次使用时递增。请注意,它是一个非标准的编译器扩展,但 GCC 和 MSVC 都支持它。