Имена переменных в C ++ (можно объявить main как переменную, но это же не так для имен других функций) - PullRequest
0 голосов
/ 12 февраля 2020

мы можем объявить ключевое слово main как имя переменной (без ошибки); однако, то же самое не верно для других функций (то есть пользовательских функций). Почему это так?

Спасибо.

(код, использующий пользовательскую функцию и то же имя переменной, выдает ошибку: error: 'int stardooms' redeclared as different kind of symbol

примечание: предыдущее объявление 'int stardooms(int)'

#include<iostream>
int main(){
    int stardooms(int);
    int stardooms;
    std::cout<<stardooms(5);
    return 0;
}
int stardooms(int a){
    if(a)
    return a;
    return 0;
}

то же самое не верно в этом случае (код выдает результат 5 без ошибок)

#include<iostream>
int main(){
    int main=5;
    std::cout<<main;
    return 0;
}

1 Ответ

2 голосов
/ 12 февраля 2020

Имя, которое объявлено в области видимости, будет скрывать объявление с тем же именем во внешней области видимости. Имя не должно иметь несколько конфликтующих объявлений в данной области, иначе вы получите ошибку, которую вы видели.

Во втором примере в области функции есть только одно объявление main, которое скрывает объявление int main() с внешнего склона. (Имена функций находятся во внешней области, а не в их собственных областях.) В первом примере в области функции есть два объявления stardooms.

Если бы вы также повторно объявили int main() в области действия функции во втором примере, вы бы увидели ту же ошибку. Аналогично, если бы вы переместили определение функции stardooms перед определением функции main и удалили объявление int stardooms(int) из области действия функции main, вы бы не получили эту ошибку ( но вы получите другой способ, чем пытаться использовать целое число как функцию).

...