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 都支持它。
是否可以这样写:
#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 都支持它。