c++ - integrar - integrales indefinidas
¿Cuál es el valor de una constante indefinida utilizada en#if? (2)
Sí, se puede confiar en eso. El estándar C99 especifica en §6.10.1 ¶3:
Después de que se hayan realizado todas las sustituciones debidas a la expansión de macro y al operador unario definido, todos los identificadores restantes se reemplazan por el número de pp
0
Editar
Lo siento, pensé que era una pregunta en 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 que se hayan realizado todas las sustituciones debidas a la expansión de macro y al operador unario definido, todos los identificadores y palabras clave restantes, excepto para
true
yfalse
, se reemplazan por el número de pp0
La única diferencia es el manejo diferente de true
y false
, que en C no requieren un manejo especial, mientras que en C ++ tienen un significado especial incluso en la fase de preprocesamiento.
Mi preprocesador parece suponer que las constantes indefinidas son 0 con el fin de evaluar #if
condiciones.
¿Se puede confiar en esto, o las constantes indefinidas dan un comportamiento indefinido?
Un identificador que no está definido como macro se convierte a 0
antes de que se evalúe la expresión.
La excepción es el identificador true
, que se convierte a 1
. Esto es específico del preprocesador C ++; en C, esto no sucede y deberá incluir <stdbool.h>
para usar true
esta manera, en cuyo caso se definirá como una macro y no se requiere un manejo especial.