2011-04-15 18 views
5

¿Qué significa la nota al pie citada en el título? Es una nota adjunta a 6.10.3p11C99, "A pesar del nombre, una directiva no es una directiva de preprocesamiento".

Si hay secuencias de fichas de pre-procesamiento dentro de la lista de argumentos que de otro modo actuar como directivas de preprocesamiento, 147) el comportamiento no está definido.

yo nos registramos y se encontró

Una directiva de preprocesamiento consiste en una secuencia de fichas de pre-procesamiento que se inicia con un token # preprocesamiento que ...

y no he encontrado el no terminal non-directive que coincide con esa sintaxis. Puede, pero no tiene que hacerlo, comenzar con un token de preprocesamiento #. Entonces, ¿no tendríamos que decir lo siguiente?

"A pesar del nombre, una directiva de preprocesamiento no es directiva."

Además, ¿cuál es el propósito de esa nota al pie?

+0

En caso de que esto ayude a alguien (ciertamente no me ayudó), se agregó en TC2. –

+0

Quizás la nota al pie debería haber dicho "A pesar del nombre, una directiva no directiva * puede ser * una directiva de preprocesamiento". Todavía no sé cuál es la intención detrás/razones de la nota al pie. –

+0

A * no directiva * no es simplemente algo que no es una directiva. A * non-directive * es cualquier cosa en una línea que comienza con '#' que no comienza con ninguno de los nombres de directivas dados en la sintaxis. Tal vez algo así como * directivo no reconocido * hubiera sido un nombre mejor. –

Respuesta

4

Mi copia de C99 no tiene que la nota (que es el original -? Qué tienes uno con correcciones TR aplica), pero creo que la idea es que si usted tiene

# non-directive 

dentro de un argumento macro lista, ese es un comportamiento indefinido.

Hubiera sido mejor hacer la < no directiva > producción incluye el #, creo, sería simplificar 6.10p3,4, así como la eliminación de esta confusión.

+0

La nota al pie fue agregada en TC2. –

+0

Gracias, creo que lo explicaste muy bien. –

Cuestiones relacionadas