C& main之间有什么区别? C ++

时间:2011-08-02 11:33:19

标签: c++ c c++11

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

除了

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

    int main() { /* … */ }
    int main(int argc, char* argv[]) { /* … */ }
    int main() ,  void main() ,etc ...     
    
  3. 主要是:

    1. C Program& C ++程序

    2. 根据ISO标准,C ++ 98,C ++ 03和C ++ 0x之间是否有任何差异?即程序的入口点(程序启动实现)等

4 个答案:

答案 0 :(得分:10)

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

  • main始终为int main()int main(int, char*[])
  • 在C89中,您必须明确地从主要return
  • 在C99和C ++中,如果您没有明确返回,则隐式return 0

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

我不明白你关于内存的问题,但要注意C99和C ++ 03都没有任何东西,只有一个基本的内存模型,而新的C ++ 0x明确添加了一个内存模型,以便能够很好地实现定义并发和原子操作。

答案 1 :(得分:8)

在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);
}

答案 2 :(得分:1)

C99和C ++符合托管环境中main的定义。有两个允许的功能接口

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

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

答案 3 :(得分:1)

  

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

不在main。然而,在C与C ++中调用之前之前发生的事情存在巨大差异。在C ++中,具有static存储的对象通常在输入main之前初始化。

注意:
允许实现在main中执行静态数据的动态初始化,但必须在首次引用该静态数据之前执行此操作。我从未遇到过利用这种灵活性的实现。