【问题标题】:What is the difference between main in C & C++C 和 C++ 中的 main 有什么区别
【发布时间】:2011-10-18 04:31:23
【问题描述】:

C 程序和 C++ 程序中的main 有什么区别?

除了

  1. return 语句(在 C 中默认为 1,在 C++ 中为 0)
  2. 语法:

    int main() { /* … */ }
    int main(int argc, char* argv[]) { /* … */ }
    int main() ,  void main() ,etc ...     
    

主要是:

  1. C 程序中的 main 和 C++ 程序的区别

  2. 根据 ISO 标准,C++98、C++03 和 C++0x 之间有什么区别吗?即程序的入口点(程序启动实现)等

【问题讨论】:

  • return 语句和 main 的参数——这就是要知道的所有内容以及标准可以谈论的所有内容
  • 那条评论对我来说毫无意义。
  • @David:感谢 Q 的回答,你能回答我的第二个问题吗......关于 c++98,c++03,c++0x 有什么不同吗主要
  • 标准没有谈到这些事情
  • Re "return statement (default 1 in C ,0 in C++)":C98中的默认return是EXIT_SUCCESS,一般#defined为0。

标签: c++ c c++11


【解决方案1】:

编辑:程序启动实现有什么区别c++98,C++03,C++++0x main等有什么区别吗......

不在main 中。然而,在 C 和 C++ 中调用 之前 main 发生的事情有很大的不同。在 C++ 中,具有static 存储的对象通常在进入main 之前进行初始化。

注意:
允许实现在main 中执行静态数据的动态初始化,但它必须在第一次引用该静态数据之前这样做。我从来没有遇到过利用这种灵活性的实现。

【讨论】:

  • 这是一个非常典型的实现将动态初始化推迟到第一次使用,你只需要检查优化的汇编代码。
【解决方案2】:

在现代 C 和现代 C++ 中:

  • main 始终是 int main() 或 int main(int, char*[])。
  • 在 C89 中,您必须从 main 显式地 return。
  • 在 C99 和 C++ 中,如果不显式返回,则隐式返回 return 0。

[(我现在检查了 C99 标准并编辑了这一段。)] 对于第二个问题,在 C99 中,您必须恰好具有两个 main 函数之一。在 C++ 标准中,如果程序具有返回 int 的 main 函数,则该程序是格式良好的,并且每个符合要求的实现都必须接受两个列出的版本作为入口点(对于“托管程序”,例如不适用于 Linux 内核);见 3.6.1。 [/edit] 据我所知,调用约定也不是标准的一部分。

我不明白你关于内存的问题,但请注意,C99 和 C++03 除了基本的内存模型外都没有其他任何东西,而新的 C++0x 显式添加了一个内存模型,以便能够很好地启用 -定义并发和原子操作。

【讨论】:

  • 在 C++ 中,符合标准的实现可以接受其他不同的 main 签名,只要它接受这两个。
  • 不,在你所有的三点中。 (1) 对于 C,您应该注意 int main(void),因为 int main() 在 C 中的含义与在 C++ 中的含义不同。 (2) 在 C99 中,您不必从 main 显式返回。 IIRC 返回值默认为EXIT_SUCCESS。 (3) C++ 中的隐式返回值也是EXIT_SUCESS,很多情况下是0,但不一定是这样。
  • @Jens: N3242 在 3.6.1 中说,如果没有 return 语句,你会得到隐含的 return 0。不过,我会更新 C99 的,谢谢你指出这一点。
  • @Jens:main() 和main(void) 有什么区别?
  • @Gene:嗯,在任何给定的程序中你只能有一个main,但它可以有任意签名,只要它返回int,它仍然是一个格式良好的程序.它可能无法在您的平台上运行。 :-)
【解决方案3】:

在 C 中,与 C++ 不同,main 可以递归调用。

/* valid C */
#include <stdio.h>
int main(int argc, char **argv) {
  putchar(argc ? '.' : '\n');
  if (argc == 0) return 0;
  return main(argc - 1, NULL);
}

【讨论】:

  • @Kerrek: 3.6.1/3: "main 函数不能在程序中使用。"
【解决方案4】:

C99 和 C++ 符合托管环境中main 的定义。允许的函数接口有两种

int main(void);
int main(int, char*[]);

两种语言都允许在没有return 语句的情况下从main 隐式返回,在这种情况下,返回值EXIT_SUCCESS 会返回给调用者。

【讨论】:

  • 查看this question:隐式返回是0,而不是EXIT_SUCCESS。
  • 我不能代表 C,但 C++ 返回 0,而不是 EXIT_SUCCESS。但是,无论这对实现意味着什么,两者都被视为“成功的”返回值。
猜你喜欢
  • 2010-10-28
  • 2014-02-22
  • 2019-07-11
  • 2011-04-05
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
相关资源
最近更新 更多