为什么我们在 Mingw 中设置 sdl 时必须在主要函数中传递参数?
Why we have to pass parameters in main functions while sdl setup in Mingw?
这些参数有什么用?
有没有其他方法也可以 运行 SDL 而无需在 main 中使用参数?
int main( int argc, char* args[] )
让我解释一下。
在通常的程序中,您可以使用 main
的两种有效形式之一:
int main()
int main(int argc, char **argv) // arguments' names do not matter here
它们之间的区别在于第二种形式允许您的程序使用 command-line 个参数。
但是 SDL 使用了一个特殊的 main
相关 hack。
SDL 在 headers 的某处有 #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 **)
。
这些参数有什么用? 有没有其他方法也可以 运行 SDL 而无需在 main 中使用参数?
int main( int argc, char* args[] )
让我解释一下。
在通常的程序中,您可以使用 main
的两种有效形式之一:
int main()
int main(int argc, char **argv) // arguments' names do not matter here
它们之间的区别在于第二种形式允许您的程序使用 command-line 个参数。
但是 SDL 使用了一个特殊的
main
相关 hack。
SDL 在 headers 的某处有 #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 **)
。