extern int main(int argc, char* argv[]) 用途?

extern int main(int argc, char* argv[]) use?

我一直在阅读 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后我自己的主函数中,我只需要写int main().

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

What are the extern main and return main(__argc, __argv) doing?

如果您在 windows 平台上编译,SFML 会为您定义 WinMain 入口点,并使用 __argc__argv 调用您的 main(int argc, char* argv[])通过 relevant documentation:

The __argc global variable is a count of the number of command-line arguments passed to the program. __argv is a pointer to an array of single-byte-character or multi-byte-character strings that contain the program arguments.

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