这些参数有什么用? 有没有其他方法也可以在不使用 main 参数的情况下运行 SDL?
int main( int argc, char* args[] )
最佳答案
让我解释一下。
在通常的程序中,您可以使用 main
的两种有效形式之一:
int main()
int main(int argc, char **argv) // arguments' names do not matter here
它们之间的区别在于第二种形式允许您的程序使用命令行参数。
但是 SDL 使用了一个特殊的
main
相关 hack。
SDL 在 header 的某处有#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()
的原型(prototype),因为 C 不支持函数重载。 SDL_main
只能有一个原型(prototype),SDL 开发人员决定它应该是 int SDL_main(int, char **)
。
原因很明确:许多应用程序需要使用命令行参数。许多程序员在想要读取命令行参数时习惯于使用 int main(int, char **)
。
关于c++ - 为什么我们在 Mingw 中设置 sdl 时必须在主要函数中传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33707250/