c++ - 为什么我们在 Mingw 中设置 sdl 时必须在主要函数中传递参数?

标签 c++ 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 相关 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/

相关文章:

c++ - std::vector 在 Linux 和 Windows 中给出不同的结果

c++ - 我可以在 SDL 窗口外跟踪我的鼠标位置吗?

c++ - 在其他机器上运行 EXE 文件请求管理员权限

netbeans - 如何在 Netbeans 中使用 mingw 设置 opencv2.4.0?

c++ - 如何在 SDL 2.0 中清除屏幕的一部分

c++ - 流畅的相机和瓷砖滚动 C++

c++ - C++ 文件中的 cuda 集成

c++ - 使用 CreateFile 打开网络文件失败并显示 FILE_NOT_FOUND

c++ - C++中的字符串反转

c++ - 这个结构已定义,那么为什么函数认为它没有定义呢?