繁体   English   中英

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

[英]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.hmain被重新定义为SDL_main ,它将调用WinMain (非控制台Windows应用程序中的实际入口点),进行一些初始化并最终调用您的主代码。 它具有argcargv的签名,非常需要您遵循它,因此int main()将不起作用。

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

程序是否要使用参数是一个不同的问题-它只需要遵守合同,即有一个名为main的功能,并带有正确的参数顺序和类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM