为什么我们必须在Mingw中设置sdl时在main函数中传递参数?

时间:2015-11-14 10:07:42

标签: c++ mingw sdl

这些论点有什么用? 还有其他方法可以在不使用main中的参数的情况下运行SDL吗?

int main( int argc, char* args[] )

1 个答案:

答案 0 :(得分:3)

让我解释一下。

在通常的程序中,您可以使用以下两种有效形式之一main

int main()

int main(int argc, char **argv) // arguments' names do not matter here

它们之间的区别在于第二种形式允许程序获取命令行参数。

<小时/> 但SDL使用特殊的main相关黑客。

SDL在标题中的某处有#define main SDL_main 因此,预处理器会将int main(...)替换为int SDL_main(...)

实际main()位于SDL代码中的某个位置。它进行了一些初始化,然后调用“main”(即SDL_main)。

实际main()可能如下所示:

extern SDL_main(int, char **);

int main(int argc, char **argv)
{
    // SDL initialization
    SDL_main(argc, argv);
}

它说明了为什么你可以使用int main()。 SDL源没有int SDL_main()的原型,因为C不支持函数重载。 SDL_main只能有一个原型,SDL开发人员认为它应该是int SDL_main(int, char **)

原因很明显:许多应用程序需要使用命令行参数。当许多程序员想要读取命令行参数时,他们习惯使用int main(int, char **)