【发布时间】:2016-05-04 10:09:41
【问题描述】:
我仍在为 C 中的宏而苦苦挣扎。
所以这个应该返回-2:
#define A
#define C
int main()
{
int i =
#ifdef A
#ifdef B // if A AND B is defined
-1
#else // A is defined AND B is NOT defined
-2
#endif
#else // A is not defined
-3
#endif
;
printf("%d \n", i);
}
为什么返回 -3 呢:
#define B
#define C
int main()
{
int i =
#ifdef A
#ifdef C
-1
#else
-2
#endif
#else
-3
#endif
;
printf("%d \n", i);
}
在我看来,宏好像有自己的逻辑。
【问题讨论】:
-
您定义 A 和 C。使用
#ifdef A您可以测试 A 是否已定义。或者使用#ifndef A来测试是否没有定义。根据结果,将为 porgram 编译该部分中的代码。这通常在头文件中使用,以防止重复或定义两次。 -
第二个打印 -3 因为 A 不再定义。
#ifdef C在#ifdef A里面,所以它甚至不会被测试。而#ifdef A的#else是-3 -
您期望什么以及为什么?
标签: c macros conditional-compilation