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