понимание пространств имен 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 должен быть решен?

Ответы на вопрос(3)

Ваш ответ на вопрос