使用 int main(void) 编译失败;main(int argc, char *argv[]) successs

Compiling with int main(void) fails; main(int argc, char *argv[]) succeeds. Why?

本文关键字:main int argv successs char 编译 void 失败 使用 argc      更新时间:2023-10-16

>问题

如果程序不使用命令行上传递的参数,为什么编译具有int main(void) main 函数的程序与编译具有int main(int argc, char *argv[]) main 函数的程序不同?

此操作系统或编译器是特定于的吗?我使用 mingw 和 g++ 没有得到相同的结果(这很奇怪,因为 wingw 是 gcc 的端口(。


法典

#include <iostream>
#include"SDL/SDL.h"
int main(void)
{
    return 0;
}

编译命令

g++ test.cpp; #g++ 4.4.5
i586-mingw32msvc-g++ test.cpp; # mingw 4.4.4

错误

(由第二个命令给出。

a(main.o):(.text+0x85): undefined reference to `_WinMain@16'

这是 SDL 的事情。在 Windows 上,当您包含 SDL.h 时,main 被重新定义为SDL_main调用 WinMain(非控制台 Windows 应用中的实际入口点(,执行一些初始化并最终调用您的主代码。它有一个带有argcargv的签名,你几乎需要遵循它,所以int main()不起作用。

main(...( 的规范是一个合约。在 C 语言中,合约说参数是 int 和 char **。这是程序必须满足的要求,如果它希望环境与之交互。

你的程序是否想要使用这些参数是一个不同的问题——它只需要遵守约定,即有一个名为 main 的函数,具有正确的参数顺序和类型。