C++变量名(可以将 main 声明为变量,但对于其他函数名称则不然)

C++ variable names (can declare main as variable however same is not true for other functions name)

本文关键字:于其他 其他 函数 变量名 main 声明 变量 C++      更新时间:2023-10-16

我们可以将 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;
}

在作用域中声明的名称将在外部作用域中隐藏同名的声明。一个名称在给定范围内不能有多个冲突的声明,否则你将得到你看到的错误。

在第二个示例中,函数作用域中只有一个main声明,该声明隐藏了外坡int main()声明。(函数名称位于外部作用域中,而不是来自其自己的作用域。在第一个示例中,函数作用域中有两个stardooms声明。

如果在第二个示例中还要在函数作用域中重新声明int main(),则会看到相同的错误。同样,如果要将函数的定义stardooms移动到函数的定义之前main,并从main函数的作用域中删除声明int stardooms(int),则不会得到该错误(但尝试使用函数等整数会得到不同的错误(。

与 Pascal 不同,C++ 不允许在另一个函数中定义一个函数。所有函数都被视为独立且平等的,这意味着您应该将stardooms()的函数原型移动到main()的函数体之外。正确的代码是以下代码:

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