Определите макрос с определенным (X) - PullRequest
2 голосов
/ 08 мая 2019

Вот макрос, который я хочу использовать, если определено X_DEFINED, то оно будет оценено как DEFAULT_X, в противном случае оно будет оценено как x

#define GET_X(x) (defined(X_DEFINED) ? DEFAULT_X : x)

Не компилируется сошибка

error: 'X_DEFINED' was not declared in this scope

Есть предложения?Я хочу иметь возможность выбирать между параметром и глобальной переменной, основываясь на том, был ли определен X_DEFINED или нет

Ответы [ 3 ]

10 голосов
/ 08 мая 2019

defined() работает только в #if и аналогичных директивах препроцессора.

Вы хотите что-то вроде этого:

#ifdef X_DEFINED
#define GET_X(x) DEFAULT_X
#else
#define GET_X(x) x
#endif
2 голосов
/ 08 мая 2019

Вам необходимо определить 2 разных макроса, в зависимости от того, определен ли X_DEFINED:

#ifdef X_DEFINED
#   define GET_X(x) x
#else
#   define GET_X(x) DEFAULT_X
#endif
1 голос
/ 08 мая 2019

Небрежно говоря, вы смешиваете вещи времени выполнения (вычисление троичного оператора) с вещами, которые происходят еще до компиляции (препроцессор).Вы можете использовать #ifdef вместо:

#ifdef X_DEFINED
    #define GET_X(x) DEFAULT_X
#else
    #define GET_X(x) x
#endif
...