Как правильно написать конструкцию, определяющую некоторое выражение через #define в зависимости от некоторого условия?

Необходимо выполнить следующий алгоритм:

если (выражение1)
    то #define флаг1
если (выражение2)
    то #define флаг2

если (флаг1) {...}
если (флаг2) {...}

Можно считать, что "выражение1" и "выражение2" взаимо противоположные, и если выполняется одно, то не выполняется другое. Был написан код на Си:

if (выражение1)
{
    #define flag1
}
if (выражение2)
{
    #define flag2
}
    
#ifdef flag1
{
    действия 1
}
#endif
    
#ifdef flag2
{
    действия 2
}
#endif

В результате объявляются оба флага. Как в зависимости от вычисляемого выражения объявить флаг через #define? Использование #define обязательно.


Ответы (1 шт):

Автор решения: Harry

Запросто. Например,

#if sizeof(int) == 4
#define flag1
#endif

#if sizeof(int) == 2
#define flag2
#endif

#ifdef flag1
...
#endif

#ifdef flag2
...
#endif

Думаю, вы же знаете, что препроцессор работает по большому счету даже до компиляции кода? :) Так что выражения ваши должны быть вычислимы еще до того, как код скомпилирован (а потому они имеют ну очень ограниченные возможности), и уж само собой, не когда код выполняется...

→ Ссылка