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

时间:2011-12-29 20:58:53

标签: c++ g++ mingw sdl main

问题

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

此操作系统或编译器是否具体?我使用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'

2 个答案:

答案 0 :(得分:10)

这是SDL的事情。在Windows上,当您添加SDL.h时,main被重新定义为SDL_main,调用WinMain(非控制台Windows应用程序中的真正入口点),进行一些初始化,最后调用你的主要代码。它有argcargv的签名,您几乎需要遵循它,因此int main()将无效。

答案 1 :(得分:-1)

main(...)的规范是合同。在C语言中,契约表明参数是int和char **。如果它希望环境与之交互,那么这是您的程序必须满足的要求。

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