用int main(void)编译失败; main(int argc,char*argv [])成功.为什么?

dan*_*jjl 5 c++ program-entry-point sdl mingw g++

问题

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

这个OS或编译器是否具体?我使用mingw和g ++得不到相同的结果(这很奇怪不是因为wingw是gcc的一个端口).


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

编译命令

g++ test.cpp; #g++ 4.4.5
i586-mingw32msvc-g++ test.cpp; # mingw 4.4.4
Run Code Online (Sandbox Code Playgroud)

错误

(由第二个命令给出.)

a(main.o):(.text+0x85): undefined reference to `_WinMain@16'
Run Code Online (Sandbox Code Playgroud)

jro*_*rok 10

这是SDL的事情.在Windows上,当您包含时SDL.h,main重新定义了SDL_main哪些调用WinMain(非控制台Windows应用程序中的真正入口点),进行一些初始化并最终调用主代码.它有一个签名argc,并argv和你几乎必须遵循它,所以int main()将无法正常工作.