c++ - 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 main
和return main(__argc, __argv)
在做什么?
__argc
下划线是怎么回事?
就像在加载 SFML 后我自己的 main 函数一样,我只需要编写int main()
.
我很好奇这在编写跨平台代码方面是如何工作的。(我在我的 win32 代码中使用了相同的方式,它起作用了!!有人解释一下这背后的魔力吗???)
解决方案
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中的注释解释了这一点。
推荐阅读
- python - 如何在 Raspberry-pi TFT /dev/fb1 上使用街机模块?
- forms - Symfony 4:如何在同一页面上管理登录表单与其他表单?
- html - 表头中的字体粗细在 Chrome 中不起作用
- javascript - 根据类别在 highcharts 折线图上创建区域
- excel - 数组的偏移范围
- c++ - AssImp 不会加载 OBJ 文件
- dataframe - PySpark 中的拆分列:如何确保输出是 int 数组,但对于某个字符使用空数组
- javascript - v-if 属性未在 VUE.js 中更新
- bash - Github Action 跳过步骤/通过语法
- node.js - 使用聚合框架转换具有两个嵌套文档的文档