C++变量名(可以将 main 声明为变量,但对于其他函数名称则不然)
C++ variable names (can declare main as variable however same is not true for other functions name)
我们可以将 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;
}
相关文章:
- 对于BTreeMap和其他依赖于Ord的东西,是否有等效于C++比较器对象?
- MOVNTI 存储是否相对于由同一线程创建的其他 MOVNTI 存储重新排序?
- 相同的 for 循环适用于其他项目,但不适用于此项目。为什么?
- 在 Eclipse 中漂亮的打印C++适用于某些项目,而不适用于其他项目
- 依赖于其他模板参数的模板参数
- QT 无法识别 UTF-8 编码,适用于其他所有位置
- 提升序列化仅适用于主要?当我在其他对象中使用时,继续说"has no member named ‘serialize’"
- 如何根据用户输入"weighted"随机数生成,使某些数字优先于其他数字?
- Vigenere密码的C++功能有时才起作用(适用于某些输入,跳过其他输入的班次)
- deadline_timer::wait 是否让位于其他任务
- 依赖于其他静态库的静态库
- 共享库依赖于具有硬编码路径的其他库
- Lambda适用于最新的Visual Studio,但在其他地方不起作用
- 数据库模块摘要(独立于)游戏的其他模块
- C++/VIM相对于其他IDE的怪异EOF行为
- 函子 - 它们相对于未实现运算符的其他类具有什么能力 ( )
- 在“其他包含目录”中添加的路径相对于什么
- 如何强制转换优先于其他转换
- 在其他模板中使用 Any 类(类似于 boost::any)
- 如何设置依赖于其他参数的参数默认值