为什么在Mingw中设置SDL时,我们必须在主函数中传递参数?

Why we have to pass parameters in main functions while sdl setup in Mingw?(为什么在Mingw中设置SDL时,我们必须在主函数中传递参数?)
本文介绍了为什么在Mingw中设置SDL时,我们必须在主函数中传递参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这些参数有什么用? 是否还有其他方法可以在不使用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相关黑客攻击。

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 **)

这篇关于为什么在Mingw中设置SDL时,我们必须在主函数中传递参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

socks4 with asynchronous boost::asio(带有异步Boost::ASIO的socks4)
Boost ASIO HTTP client POST(增强ASIO HTTP客户端开机自检)
asio::strandlt;asio::io_context::executor_typegt; vs io_context::strand(Asio::strandlt;asio::io_context::executor_typegt;VS io_CONTEXT::Strand)
What#39;s the difference between asio::io_context and asio::thread_pool?(ASIO::IO_CONTEXT和ASIO::THREAD_POOL有什么区别?)
How to use boost::asio with Linux GPIOs(如何在Linux GPIO中使用Boost::ASIO)
Boost asio io_service vs io_context(增强ASIO io_服务与io_Context)