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;
}

是的。但是您需要定义 truefalse(或至少 true),否则预处理器会将预处理器条件中的此类无法解析的标记视为 0(请参阅 6.10.1p4),这这就是为什么你在输出中得到 7 而不是 5(truefalse 在条件语句中都被视为 0,因为 0 == 0,所有 BIT 宏被设置为其非零版本)。

#includeing <stdbool.h> 将提供定义。他们是 guaranteed to be (7.18):

#define true 1
#define false 0