C++ 变量名(可以将 main 声明为变量,但对于其他函数名则不然)
Posted
技术标签:
【中文标题】C++ 变量名(可以将 main 声明为变量,但对于其他函数名则不然)【英文标题】:C++ variable names (can declare main as variable however same is not true for other functions name) 【发布时间】:2020-05-28 08:16:02 【问题描述】:我们可以将 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 关键字声明为变量名” -main
不是 keyword。
【参考方案1】:
在作用域中声明的名称将隐藏在外部作用域中的同名声明。一个名称在给定范围内不能有多个冲突的声明,否则您将收到您看到的错误。
在第二个示例中,函数范围内只有一个 main
声明,它将声明 int main()
隐藏在外斜面上。 (函数名称在外部范围内,而不是在它们自己的范围内。)在您的第一个示例中,函数范围中有两个 stardooms
声明。
如果您还要在第二个示例的函数范围内重新声明 int main()
,您会看到相同的错误。同样,如果您将函数 stardooms
的定义移动到函数 main
的定义之前,并从 main
函数的范围中删除声明 int stardooms(int)
,您将不会收到该错误 (但是你会得到一个不同的结果,而不是尝试像函数一样使用整数)。
【讨论】:
指向 C++ 关键字列表(如 en.cppreference.com/w/cpp/keyword)可能是有意义的,因为 OP 似乎(错误地)认为main
是其中之一。
谢谢你!从来没有想过这会与函数的范围有关......以上是关于C++ 变量名(可以将 main 声明为变量,但对于其他函数名则不然)的主要内容,如果未能解决你的问题,请参考以下文章