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 声明为变量,但对于其他函数名则不然)的主要内容,如果未能解决你的问题,请参考以下文章

C++中强行修改const常量的问题

C++:从函数访问主变量的最简单方法?

从 C++ 中的类访问私有变量

C++笔记--函数

C++中如何定义变量

C++中的声明和定义