代码之家  ›  专栏  ›  技术社区  ›  Jichao

C++标准禁止空主机()原型吗?

  •  6
  • Jichao  · 技术社区  · 15 年前

    在C++标准1998版和2003版中,

    实现不应预先定义主要功能。此函数不应重载。它应该 具有int类型的返回类型,否则其类型是实现定义的。

    我不是一个说英语的人。我不确定“除了其他”意味着什么。它是禁止其他返回类型,还是给C++编译器编写者权?

    那么答案是什么?

    6 回复  |  直到 13 年前
        1
  •  12
  •   bmargulies    15 年前

    你引用的英文不允许声明 main 归来 void . 它允许传入的参数发生变化,但不允许返回类型发生变化。

        2
  •  7
  •   GManNickG    15 年前

    啊!是的。标准允许的唯一返回类型是int。引用第3.6.1节:

    它应具有返回类型 int,否则它的类型是 实现定义。

    意思是看起来像这样:

    int main( float f );
    int main( int x, int y );
    

    等。

        3
  •  2
  •   Frank    15 年前

    类型包含的不仅仅是返回类型。因此,返回类型必须是int,但是您可以自由地考虑剩余的参数,例如,您可以在

    int main()
    

    int main(int argc, char **argv)
    
        4
  •  1
  •   Rob Kennedy    15 年前

    标准是返回类型必须是 int ,但类型的其余部分取决于实现。例如,可以使用标准兼容的(但不是非常有用的)C++编译器。

    int main(int secondsSinceSystemStart, int myFavoriteNumber, char* aFunnyJoke)
    

    Wikipedia :

    在C和C++中,main函数的函数原型看起来如下:

    int main(void)
    int main(int argc, char **argv)
    

    参数argc、参数count和参数向量argv分别给出程序命令行参数的数目和值。argc和argv的名称可以是任何有效的标识符,但使用这些名称是常见的约定。其他的与平台相关的格式也被C和C++标准所允许;例如,UNIX(虽然不是POSIX 1)和微软Visual C++有第三个参数赋予程序的环境,否则通过GDENV在STDLIB中访问。

    int main(int argc, char **argv, char **envp)
    

    mac os x和darwin有第四个参数,其中包含任意os提供的信息,例如执行二进制文件的路径:

    int main(int argc, char **argv, char **envp, char **apple)
    
        5
  •  0
  •   Ashish    15 年前

    就参数而言,它允许

    1. int()

    2. int main(int argc,char*argv[])

    3. int main(int argc,char*argv[],char*envr[])

    但是按照标准返回类型应该是 int 为了保持一致。

        6
  •  0
  •   Omnifarious    15 年前

    其目的是说 main 返回类型以外的函数是由实现定义的。这意味着本标准本条款允许本声明:

    int main(int fred, char *bouncy);
    

    但不是这个:

    void main(int fred, char *bouncy);
    

    它的返回类型 必须 int ,但允许实现具有不同的参数类型。