Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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+中,main的正确声明是什么+;? 问题 < > C++中的主< /代码>函数的正确签名是什么?_C++_Function_Standards_Main_C++ Faq - Fatal编程技术网

在C+中,main的正确声明是什么+;? 问题 < > C++中的主< /代码>函数的正确签名是什么?

在C+中,main的正确声明是什么+;? 问题 < > C++中的主< /代码>函数的正确签名是什么?,c++,function,standards,main,c++-faq,C++,Function,Standards,Main,C++ Faq,正确的返回类型是什么?从main返回值意味着什么 允许的参数类型是什么,它们的含义是什么 这个系统是特定的吗 这些规则是否随着时间的推移而改变 如果我违反了他们怎么办 必须在全局命名空间中将main函数声明为非成员函数。这意味着它不能是类的静态或非静态成员函数,也不能放在名称空间(甚至是未命名的名称空间)中 除了在全局命名空间中的函数外,C++中没有保留名称主。您可以自由声明名为main的其他实体,包括不在全局命名空间中的类、变量、枚举、成员函数和非成员函数 您可以将名为main的函数

正确的返回类型是什么?从
main
返回值意味着什么

  • 允许的参数类型是什么,它们的含义是什么

  • 这个系统是特定的吗

  • 这些规则是否随着时间的推移而改变

  • 如果我违反了他们怎么办


  • 必须在全局命名空间中将
    main
    函数声明为非成员函数。这意味着它不能是类的静态或非静态成员函数,也不能放在名称空间(甚至是未命名的名称空间)中

    除了在全局命名空间中的函数外,C++中没有保留名称<代码>主<代码>。您可以自由声明名为

    main
    的其他实体,包括不在全局命名空间中的类、变量、枚举、成员函数和非成员函数

    您可以将名为
    main
    的函数声明为成员函数或在命名空间中,但此类函数不是指定程序启动位置的
    main
    函数


    main
    函数不能声明为
    static
    inline
    。也不能超载,;全局命名空间中只能有一个名为
    main
    的函数


    程序中不能使用
    main
    函数:不允许从代码中的任何位置调用
    main
    函数,也不允许获取其地址

    main
    的返回类型必须是
    int
    。不允许使用其他返回类型(此规则以粗体显示,因为通常会看到不正确的程序声明
    main
    ,返回类型为
    void
    ;这可能是有关
    main
    函数的最常违反的规则)

    必须允许有两个
    main
    声明:

    int main()               // (1)
    int main(int, char*[])   // (2)
    
    (1)中,没有参数

    (2)中,有两个参数,通常分别命名为
    argc
    argv
    argv
    是指向表示程序参数的C字符串数组的指针
    argc
    argv
    数组中的参数数

    通常,
    argv[0]
    包含程序名,但情况并非总是如此
    argv[argc]
    保证为空指针

    请注意,由于数组类型参数(如
    char*[]
    )实际上只是一个伪装的指针类型参数,因此以下两种都是写入(2)的有效方法,它们的含义完全相同:

    int main(int argc, char* argv[])
    int main(int argc, char** argv)
    
    一些实现可能允许其他类型和数量的参数;您必须检查实现的文档,看看它支持什么

    main()
    应返回零表示成功,非零表示失败。您不需要在
    main()
    中显式编写
    return
    语句:如果让
    main()
    返回而没有显式的
    return
    语句,则与编写
    return 0相同。以下两个
    main()
    函数具有相同的行为:

    int main() { }
    int main() { return 0; }
    
    中定义了两个宏,
    EXIT\u SUCCESS
    EXIT\u FAILURE
    ,它们也可以从
    main()
    返回,分别表示成功和失败

    main()
    返回的值被传递到
    exit()
    函数,该函数终止程序


    请注意,所有这些仅适用于为托管环境编译时(非正式地说,在托管环境中,您有一个完整的标准库,并且有一个操作系统运行您的程序)。编译一个独立环境(例如,某些类型的嵌入式系统)的C++程序也是可能的,在这种情况下,启动和终止是完全实现的,甚至不需要一个<代码>主()/>代码>函数。如果你正在为现代桌面OS编写C++,那么你正在编译一个托管环境。

    < P>这两个有效的主干是<代码> int main()< /C>和<代码> int main(int,char *])< />。其他任何东西都可以编译,也可以不编译。如果
    main
    未显式返回值,则隐式返回0

    来自标准文档,3.6.1.2 main函数

    它应该有回报 int类型,但其类型由实现定义。所有实现都应允许以下两种情况 主要产品的定义:

    int main(){/../}
    intmain(intargc,char*argv[]){/../}

    在后一种形式中,
    argc
    应为从程序所在环境传递给程序的参数数 程序正在运行。如果argc为非零,则应在argv[0]到argv[argc-1]中提供这些参数作为指向的指针 以null结尾的多字节字符串的初始字符


    希望这有帮助。

    关于返回值及其含义的详细信息

    根据3.6.1(
    [basic.start.main]
    ):

    main
    中的return语句的作用是离开
    main
    函数(销毁具有自动存储持续时间的任何对象),并以返回值作为参数调用
    std::exit
    。如果控件到达
    main
    的末尾时没有遇到
    return
    语句,则执行

    return 0;
    
    第18.5节(
    [support.start.term]
    )详细介绍了
    std::exit
    的行为,并描述了状态代码:

    最后,控制是返回