Supongo que la mayoría de los que han trabajado con C/C++ tienen una intuición de cómo funciona el preprocesador (más o menos). Eso creí hasta hoy, pero mi intuición fue errónea. Aquí está la historia:(¿Extraño?) Comportamiento del preprocesador GCC
Hoy intenté algo, pero no puedo explicar el resultado. en primer lugar considerar el siguiente código:
#define A B
#define B A
A
B
¿Qué ocurre? Así, el resultado después de compilar con la bandera -E es la siguiente:
A
B
Bueno, bueno, tal vez no lo que cualquiera esperaría, pero es explicable. Supongo que el preprocesador de alguna manera descubrió que hay algún problema, y no lo entendía.
La siguiente cosa que probé fue la siguiente:
#define A B
#define B A C
#define C x
A
B
Ahora a la, para mí, resultado inexplicable:
A x
B x
¿Cómo sucedió esto? No puedo encontrar una forma razonable de cómo sucedió esto. El primer comando (#define A B) no se puede ejecutar, porque luego A sería reemplazado por B, y el resultado final debería ser el mismo para ambos. ¡Pero si no lo es, entonces no hay forma de que pueda suceder "A x"!
Mi pregunta: ¿Qué me estoy perdiendo? Obviamente no sé la forma exacta de cómo funciona el preprocesador. ¿Conoces alguna fuente al respecto?
Y esta es la razón por #defines es necesario evitar ... – Goz
Sí, esta es otra razón ... No es que quiera decir que no los use en absoluto. Para algunas tareas son muy útiles (y la forma de hacerlo es i.m.o.). – George