Как правильно написать конструкцию, определяющую некоторое выражение через #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
Думаю, вы же знаете, что препроцессор работает по большому счету даже до компиляции кода? :) Так что выражения ваши должны быть вычислимы еще до того, как код скомпилирован (а потому они имеют ну очень ограниченные возможности), и уж само собой, не когда код выполняется...