C 预处理器语法
C Preprocessor Syntax
是否可以用 C 预处理器做这样的事情?
如果可能的话,正确的语法是什么?
我希望看到“5”作为答案,但我得到“7”。
谢谢
#include <stdio.h>
#define ENABLE_FEATURE_1 true
#define ENABLE_FEATURE_2 false
#define ENABLE_FEATURE_3 true
#if (ENABLE_FEATURE_1 == true)
#define FT_BIT_0 1
#else
#define FT_BIT_0 0
#endif
#if (ENABLE_FEATURE_2 == true)
#define FT_BIT_1 2
#else
#define FT_BIT_1 0
#endif
#if (ENABLE_FEATURE_3 == true)
#define FT_BIT_2 4
#else
#define FT_BIT_2 0
#endif
#define ENABLED_FEATURES (FT_BIT_0 + FT_BIT_1 + FT_BIT_2)
int main() {
printf("Enabled Features: %i", ENABLED_FEATURES);
return 0;
}
是的。但是您需要定义 true
和 false
(或至少 true
),否则预处理器会将预处理器条件中的此类无法解析的标记视为 0(请参阅 6.10.1p4),这这就是为什么你在输出中得到 7 而不是 5(true
和 false
在条件语句中都被视为 0
,因为 0 == 0
,所有 BIT 宏被设置为其非零版本)。
#include
ing <stdbool.h>
将提供定义。他们是 guaranteed to be (7.18):
#define true 1
#define false 0
是否可以用 C 预处理器做这样的事情? 如果可能的话,正确的语法是什么? 我希望看到“5”作为答案,但我得到“7”。 谢谢
#include <stdio.h>
#define ENABLE_FEATURE_1 true
#define ENABLE_FEATURE_2 false
#define ENABLE_FEATURE_3 true
#if (ENABLE_FEATURE_1 == true)
#define FT_BIT_0 1
#else
#define FT_BIT_0 0
#endif
#if (ENABLE_FEATURE_2 == true)
#define FT_BIT_1 2
#else
#define FT_BIT_1 0
#endif
#if (ENABLE_FEATURE_3 == true)
#define FT_BIT_2 4
#else
#define FT_BIT_2 0
#endif
#define ENABLED_FEATURES (FT_BIT_0 + FT_BIT_1 + FT_BIT_2)
int main() {
printf("Enabled Features: %i", ENABLED_FEATURES);
return 0;
}
是的。但是您需要定义 true
和 false
(或至少 true
),否则预处理器会将预处理器条件中的此类无法解析的标记视为 0(请参阅 6.10.1p4),这这就是为什么你在输出中得到 7 而不是 5(true
和 false
在条件语句中都被视为 0
,因为 0 == 0
,所有 BIT 宏被设置为其非零版本)。
#include
ing <stdbool.h>
将提供定义。他们是 guaranteed to be (7.18):
#define true 1
#define false 0