如果程序不使用命令行传递的参数,为什么编译具有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'
答案 0 :(得分:10)
这是SDL的事情。在Windows上,当您添加SDL.h
时,main
被重新定义为SDL_main
,调用WinMain
(非控制台Windows应用程序中的真正入口点),进行一些初始化,最后调用你的主要代码。它有argc
和argv
的签名,您几乎需要遵循它,因此int main()
将无效。
答案 1 :(得分:-1)
main(...)的规范是合同。在C语言中,契约表明参数是int和char **。如果它希望环境与之交互,那么这是您的程序必须满足的要求。
你的程序是否想要使用这些参数是一个不同的问题 - 它必须遵守合同,即有一个名为main的函数,具有正确的参数顺序和类型。