[英]Compiling with int main(void) fails; main(int argc, char *argv[]) succeeds. Why?
如果编译具有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应用程序中的实际入口点),进行一些初始化并最终调用您的主代码。 它具有argc
和argv
的签名,非常需要您遵循它,因此int main()
将不起作用。
main(...)的规范是合同。 在C语言中,合同规定参数为int和char **。 如果程序希望环境与之交互,则这是程序必须满足的要求。
程序是否要使用参数是一个不同的问题-它只需要遵守合同,即有一个名为main的功能,并带有正确的参数顺序和类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.