首页 > 解决方案 > extern int main(int argc, char* argv[]) 使用?

问题描述

我一直在阅读 SFML 的源代码。我发现它以如下方式包装 win32 的方式:

#ifdef _WIN32 //something like that
#include <windows.h>
extern int main(int argc, char* argv[]);
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
{
   return main(__argc, __argv);
}
#endif

所以line 4我看到了这个典型的win32程序入口。然而,extern mainreturn main(__argc, __argv)在做什么?

__argc下划线是怎么回事?

就像在加载 SFML 后我自己的 main 函数一样,我只需要编写int main().

我很好奇这在编写跨平台代码方面是如何工作的。(我在我的 win32 代码中使用了相同的方式,它起作用了!!有人解释一下这背后的魔力吗???)

标签: c++cross-platformsfml

解决方案


extern main和在做什么return main(__argc, __argv)

如果您在 Windows 平台上编译,SFML 会为您定义 WinMain 入口点,并调用您的main(int argc, char* argv[])with __argc相关文档__argv对此进行了解释:

__argc全局变量是传递给程序的命令行参数数量的计数。__argv是指向包含程序参数的单字节字符或多字节字符串数组的指针。

SFML 这样做,正是为了使开发人员即使在 Win32 应用程序项目中也可以使用标准的 main 函数,从而保持可移植的代码。SFML/MainWin32.cpp中的注释解释了这一点。


推荐阅读