Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我们可以在C+;中重载main()函数吗+;?_C++_Overloading_Main_Standards - Fatal编程技术网

C++ 我们可以在C+;中重载main()函数吗+;?

C++ 我们可以在C+;中重载main()函数吗+;?,c++,overloading,main,standards,C++,Overloading,Main,Standards,既然C++允许函数重载,我们可以重载main() 比如说, int main(const std::string &) { return 0; } int main(int argc, char *argv[]) { return main("calling overloaded main"); } gcc-4.3.4未编译此文件,并给出以下错误:(请参阅) prog.cpp:4:错误:“int main(const std::string&)”的第一个参数应该是“int”

既然C++允许函数重载,我们可以重载
main()

比如说,

int main(const std::string &)
{
   return 0;
}
int main(int argc, char *argv[])
{
  return main("calling overloaded main");
}
gcc-4.3.4
未编译此文件,并给出以下错误:(请参阅)

prog.cpp:4:错误:“int main(const std::string&)”的第一个参数应该是“int”
prog.cpp:4:错误:“int main(const std::string&)”只接受零或两个参数
prog.cpp:在函数“int main(int,char**)”中:
程序cpp:8:错误:C函数“int main(int,char**)”的声明与冲突
程序cpp:4:错误:前面的声明“int main(const std::string&)”在这里
prog.cpp:在函数“int main(int,char**)”中:
程序cpp:10:错误:从“const char*”到“int”的转换无效
程序cpp:8:错误:函数“int main(int,char**)”的参数太少
prog.cpp:10:错误:此时在文件中


所以我想知道C++标准是否明确禁止超载<代码>主<代码>?如果是,哪种说法?

是的,它明确禁止这样做。请参阅3.6.1p2

实现不应预定义主要功能。此功能不应过载


这样,主函数的名称就可以保持不混淆。也就是说,运行库可以调用具有固定名称的符号(例如
main
\u main
)以跳转到main函数。库的代码不需要依赖于程序的
main
函数的参数列表


还允许实现为
main
函数定义其他有效参数列表(例如,POSIX规范为环境变量指定了
char**env
参数)。当
main
的重载是一个“非主功能”时,或者它是否是一个“主功能”,因此它是一个入口点时,就不清楚了。假设,如果您要声明多个入口点,您可能希望得到一个错误,因此这些问题很重要

您所做的是声明程序执行的两个入口点。这是编译器禁止的,因为当你运行程序时,程序将不知道从哪里开始


我也看不出你为什么要在你的应用程序设计中这样做。

< P> >我的强>全局主函数(所有类外的主函数)不能在C++、
#include<iostream>
using namespace std;
int main(int noofarg,char *values[])
{
    std::cout<<"hello "<<endl<<values[0]<<endl<<values[1]<<endl<<noofarg;
    return 0;
}
int main()
{
 std::cout<<"hello main()";
    return 0;
}
#包括
使用名称空间std;
int main(int noofarg,char*值[])
{

std::你对此有引证吗?@bdonlan:例如(ISO/IEC 14882:1998(E))懒惰的我。我应该查一下标准本身。+1.你能澄清一下你对POSIX的看法吗?你是说它允许第三个参数进入main吗?我看了规范,它提到了一个特殊的
extern char**environ
作为变量。你可以想象这样一个系统是如何工作的。程序将从调用相应表单的唯一
main()
。因此它会选择表单
intmain(intargc,char*argv[])
中的一个。显然这不会发生,但如果需要的话,也不难想象会发生。
#include<iostream>

using namespace std;

class MainClass{

        int main1()
    {

        std::cout<<"hello main()"<<endl;
        return 0;
    }
    int main(int noofarg,char *values[])
    {

        std::cout<<"hello "<<endl<<values[0]<<endl<<values[1]<<endl<<noofarg;
        return 0;
    }
    int main()
    {

     std::cout<<"hello main()";
        return 0;

    }
};

int main()
{

 std::cout<<"hello main()";
    return 0;

}