Citando here,la comprensión de los espacios de nombres C
En C, hay dos espacios de nombres diferentes de tipos: un espacio de nombres de unión/nombres de las etiquetas struct/ENUM y un espacio de nombres de nombres typedef.
name.c
$ cat name.c
#include<stdio.h>
typedef long long long2;
int long2() {
return 4;
}
int main() {
printf("hello, world!");
return 0;
}
$ gcc name.c -o name
name.c:4: error: 'long2' redeclared as different kind of symbol
name.c:3: error: previous declaration of 'long2' was here
$
name2.c
$ cat name2.c
#include<stdio.h>
int four() {
return 4;
}
struct dummy {
int member;
};
int main() {
struct dummy four;
}
$ gcc name2.c -o name2
$
Estoy tratando de entender los conflictos de espacio de nombres C.
En el primer caso, ¿por qué hay un conflicto? ¿Las funciones también pertenecen al espacio de nombres typedef?
En el segundo caso, ¿por qué no hay ningún conflicto? La función y la variable se nombran cuatro. ¿Por qué el compilador lo permite? ¿Cómo se supone que se resuelve
&four
?
¿Las estructuras/uniones/enums comparten un espacio de nombre? es decir, ¿'struct T' y' union T' van bien juntas? – iBug