在C,有類型的兩個不同的命名空間:結構/聯合/枚舉標記名稱的命名空間和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
$
我想了解Ç命名空間衝突。
在第一種情況下,爲什麼會出現衝突?函數是否也屬於typedef命名空間?
在第二種情況下,爲什麼沒有衝突呢?函數和變量都被命名爲四。爲什麼編譯器允許這樣做?
&four
應該如何解決?
結構/聯合/枚舉是否共享一個名稱空間?也就是說'struct T'和'union T'能夠很好的結合在一起嗎? – iBug 2017-11-17 10:00:03