C预处理器语法

3

使用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;
}
1个回答

2
是的。但你需要为truefalse(或至少true)定义,否则预处理器将把这些无法解析的符号在预处理条件中视为0(参见6.10.1p4),这就是为什么你的输出中得到7而不是5(因为在条件语句中,truefalse都被视为0,由于0 == 0,所有的BIT宏都被设置为它们的非零版本)。
通过#include <stdbool.h>可以提供这些定义。它们是保证的(7.18):
#define true 1
#define false 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接