Citando here,comprensione namespace C
In C, ci sono due diversi spazi dei nomi dei tipi: uno spazio dei nomi di struct/union/i nomi dei tag enum e uno spazio dei nomi di typedef nomi.
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
$
Sto cercando di capire il C conflitti di namespace.
Nel primo caso, perché c'è un conflitto? Le funzioni appartengono anche al namespace typedef?
Nel secondo caso, perché non c'è alcun conflitto? Sia la funzione che la variabile sono denominate quattro. Perché il compilatore lo consente? Come si può risolvere
&four
?
Does structs/unions/enum condivide uno spazio dei nomi? cioè, possiamo 'struct T' e' union T' andare bene insieme? – iBug