Синтаксис препроцессора C - PullRequest
0 голосов
/ 04 октября 2018

Можно ли сделать что-то подобное с препроцессором 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 Ответ

0 голосов
/ 04 октября 2018

Да.Но вам нужны определения для true и false (или по крайней мере true), иначе препроцессор будет обрабатывать такие неразрешимые токены в условных выражениях препроцессора как 0 (см. 6.10.1p4 ), поэтомувы получаете 7, а не 5 на выходе (и true, и false обрабатываются как 0 в условных выражениях, а поскольку 0 == 0, все макросы BIT устанавливаются в ненулевое значениеверсии).

#include ing <stdbool.h> предоставит определения.Они гарантированно равны (7,18) :

#define true 1
#define false 0
...