Переменные и typedefs занимают то же пространство имен и и могут не обмениваться именами с другими идентификаторами в точно такой же области.
Однако ваш второй a
внутри main
, и применяются правила области действия: второе a
переопределяет первое.
Вы можете сделать то же самое с простыми переменными:
int a;
int main() {
int a;
}
Вы заметите, чтоесли вы переместите объявление переменной за пределы main, программа не будет компилироваться.