Но критический момент в ваших примерах - не пространство имен, а область имен.
В name.c оба long2
являются "обычными идентификаторами" (использовать одно и то же пространство имен), и оба они определены в одной и той же области видимости, поэтому возникает конфликт.(C99 §6.7 / 3)
Если name2.c , локальная переменная four
находится в области видимости глубже функции four
, поэтому переменная скрывается функция four
(C99 §6.2.1 / 4).