El alcance de #define
es hasta el final del archivo. Pero, ¿de dónde empieza? Básicamente probé el siguiente código.Alcance del preprocesador #define en C
#include<stdio.h>
#include<stdlib.h>
#define pi 3.14
void fun();
int main()
{
printf("%f \n",pi);
#define pi 3.141516
fun();
return 0;
}
void fun(){
printf("%f \n",pi);}
La salida del programa anterior viene a ser
3.140000
3.141416
Teniendo en cuenta el procesamiento previo para main el valor de pi debe ser 3.141516 y fuera principal 3.14. Esto es incorrecto pero por favor explica por qué.
Recuerde que es PREprocessing. No conoce ni se preocupa por la estructura de su código, en el caso de #define está haciendo sustituciones en el orden en que las ve en relación con el valor más reciente de la variable #defined. – Joe
Este código está mal formado: no se puede '# definir' una macro con el mismo nombre que otra macro que esté definida actualmente a menos que sus definiciones sean las mismas. Entonces, el segundo '#define pi' hace que el programa esté mal formado. Primero necesitas '#undef pi'. –
* El alcance de #define es hasta el final del archivo. * No, final del archivo ** o # undef ** del mismo identificador de macro. – Jens