Sí, se puede confiar en él. El estándar C99 especifica en §6.10.1 ¶3:
Después de que se han realizado todos los reemplazos debido a la expansión de la macro y la definida unario operador, todos los identificadores restantes se sustituyen con el PP-número 0
Edición
lo siento, pensé que era una pregunta C; Aún así, no es gran cosa, la sección equivalente en el estándar de C++ (§16.1 ¶4) establece:
Después de todos los reemplazos debido a la expansión macro y el operador unario definido se han realizado, todos los identificadores y las palabras clave restantes, a excepción de true
y false
, son reemplazados con el PP-número 0
la única diferencia es la diferente manejo de true
y false
, que en C no necesitan un manejo especial, mientras que en C++ que tienen un significado especial incluso en la fase de preprocesamiento.