• 作者:老汪软件技巧
  • 发表时间:2024-09-23 04:00
  • 浏览量:

int main(int argc, char *argv[], char *envp[]);

标准 CC++ 中的 main 函数标准 C

在host环境下,C99 标准规定了程序启动时调用的主函数 main。这个函数应返回 int 类型,且可以定义为没有参数或具有两个参数。具体定义如下:

int main(void) { /*... */ }

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

参数名称(如 argc 和 argv)可以任意定义,因为它们在函数内是局部的。此外,int 类型可以用 typedef 名称替代,argv 的类型也可以写成 char **argv 等。

C11 和 C18 标准与 C99 标准基本一致。

标准 C++

C++98 标准规定,程序必须包含一个名为 main 的全局函数,这是程序的起始点。main 函数的返回类型应为 int,且不应被重载。允许的定义包括:

int main() { /*... */ }

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

C++ 标准明确指出,main 函数必须具有 int 返回类型,并且与 C 标准要求的两个签名相同。因此,void main() 在 C++ 中是被禁止的,尽管不符合标准的实现可能允许其他形式。

C++03、C++11、C++14 和 C++17 标准与 C++98 标准基本相同。

常见扩展

在 Unix 系统中,通常支持 main 函数的第三种变体:

int main(int argc, char **argv, char **envp) {... }

这里的第三个参数是一个以空指针结尾的字符串指针数组,指向包含环境变量的字符串。即使不使用这个参数,环境变量仍可通过 extern char **environ; 访问。C 标准将此视为常见扩展,并在附录 J 中记录。

MSVC

微软 VS 2010 编译器允许 main 的声明语法为:

int main();

或可选的:

int main(int argc, char *argv[], char *envp[]);

此外,main 和 wmain 函数可以声明为返回 void。在这种情况下,无法通过 return 语句向父进程返回退出代码,必须使用 exit 函数。

微软没有规定 C 和 C++ 标准要求的带两个参数的 main() 版本,而是只提供一种三参数的形式。

int main() 与 int main(void)

在 C 和 C++ 中,这两种表示法有细微区别。在 C 中,如果调用 main() 函数,使用 int main() 可能不会引发错误,而 int main(void) 则会导致编译错误,因为后者声明该函数不接受任何参数。C11 标准展示了两者都是有效的,但它们在某些情况下的行为可能不同。

总的来说,理解 main 函数的标准和扩展形式对编写符合规范的 C 和 C++ 程序至关重要。