Какова ценность константы undefined, используемой в #if?
Мой препроцессор, похоже, предположил, что константы undefined равны 0 для оценки условий #if.
На что это можно положиться, или константы undefined дают поведение undefined?
Ответ 1
Да, на это можно положиться. Стандарт C99 указывает в §6.10.1 ¶3:
После всех замен из-за расширения макроса и определенного унарного оператор был выполнен, все остальные идентификаторы заменены на pp-номер 0
Edit
Извините, я думал, что это вопрос C; все же, неважно, эквивалентный раздел в стандарте С++ (§16.1 ¶4) гласит:
После всех замен из-за расширения макроса и определенного унарного оператора были выполнены все остальные идентификаторы и ключевые слова, за исключением true и false, заменены на pp-число 0
Единственное различие заключается в различной обработке true и false, которые в C не требуют специальной обработки, тогда как в С++ они имеют особое значение даже на этапе предварительной обработки.
Ответ 2
Идентификатор, который не определяется как макрос, преобразуется в 0 до того, как выражение будет оценено.
Исключением является идентификатор true, который преобразуется в 1. Это характерно для препроцессора С++; в C этого не происходит, и вам нужно будет включить <stdbool.h> для использования true таким образом, и в этом случае он будет определен как макрос, и не требуется специальная обработка.