锁定18小时此问题的评论已被禁用,但仍在接受新的答案和其他交互。Learn more。
我想用宏有条件地编译我的代码。这些问题中概述的通常方法:12345是#define A_MACRO "and give it a value"
,然后使用#ifdef
或#if defined
来确定它是否已定义。示例:
//#define A 0
#define B 0
//#define C 0
#ifdef A
/*A stuff*/
#elif defined(B)
/*B stuff*/
#else
/*C stuff*/
#endif
我只是有个想法,想做一些像这样的事情:
#define A 0
#define B 1
#define C 2
#define LETTER B
#if LETTER == A
/*A stuff*/
#elif LETTER == B
/*B stuff*/
#else
/*C stuff*/
#endif
使用其中一种方法有什么好处或缺点吗?我个人认为第二种方法可读性更强,如果你不使用宏,也不需要注解掉它们。另外,必须给予宏一个不以任何方式使用的值也是违反直觉的。
2条答案
按热度按时间szqfcxe21#
#define
值由编译器的预处理器阶段拾取,并在单击以编译代码时进行处理。在这里,你并没有将它们用作宏,因为它们不会替换代码,例如
#define SUM(x,y) x+y
,而是用来指示编译器应该处理或不应该处理的代码块。通常,您会将这些作为预处理器指令的一部分,而不是在代码中定义它们。
对于预处理器指令,不需要任何值,你可以使用A、B或C --尽管我建议使用更长、更有意义的值。
然后你将使用你的第一个代码块
以这种方式使用时,不在适用的
#if .. #endif
逻辑内的代码将被排除在编译过程之外。因此,如果定义了A
,则不会编译B
或C
适用代码。dfddblmv2#
使用其中一种方法有什么好处或缺点吗?
我相信第二个应该是首选 * 当一个选项是选择多个路径 *,因为:
LETTER