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 main
和 return 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 中的评论解释了这一点。
我一直在阅读 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 main
和 return main(__argc, __argv)
在做什么?
带下划线的 __argc
是什么?
在加载SFML后我自己的主函数中,我只需要写int main()
.
我很好奇这在编写跨平台代码方面是如何工作的。 (我在我的 win32 代码中使用了相同的方式,它起作用了!!有人解释一下这背后的魔法吗???)
What are the
extern main
andreturn 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 中的评论解释了这一点。