понимание пространств имен C
Цитировать изВот,
В C есть два разных пространства имен типов: пространство имен имен тегов struct / union / enum и пространство имен имен 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
$
Я пытаюсь понять конфликты пространства имен C.
В первом случае, почему возникает конфликт? Функции также принадлежат пространству имен typedef?
Во втором случае, почему вообще нет конфликта? Функция и переменная называются четыре. Почему компилятор позволяет это? Как&four
должен быть решен?