我在面试中被问到如何通过可运行的C代码识别平台?
该代码必须能够在两个平台上运行(即不能使用特殊的头文件函数进行检查)。
我在面试中被问到如何通过可运行的C代码识别平台?
该代码必须能够在两个平台上运行(即不能使用特殊的头文件函数进行检查)。
#if defined(_WIN64)
/* Microsoft Windows (64-bit). ------------------------------ */
#elif defined(_WIN32)
/* Microsoft Windows (32-bit). ------------------------------ */
#endif
在运行时,您可以执行例如stat("/dev", &buf)
,这仅适用于Linux。尝试使用popen
(3)说uname
是另一种可行的方法:如果您在Linux上,则可以读取"linux\n",而类似cygwin的环境显然报告NT
,也可以在此处查看。
大多数常见的方法在编译时确定。
如果您真的坚持要在运行时确定,您可以尝试使用一种设备(例如,尝试打开一个名为/dev/null
的文件应该在Linux上工作,但通常在Windows上失败)。
notepad /dev/null
。 - user184968main
函数中一个本地变量的地址。如果它小于0x80000000
,则表示你正在使用Windows。如果它大于0x80000000
,则表示你正在使用Linux。 - James Kanzeif ( windows ) LoadLibrary(...); else dlopen(...);
这样的代码不会链接到任何地方。 - James Kanze如果你只考虑 Linux 平台或 Windows 平台,这段代码将在 C 和 C++ 中按需求工作。
#include <stdio.h>
#if defined(__linux__) // any linux distribution
#define PLATFORM "linux"
#elif defined(_WIN32) // any windows system
#define PLATFORM "windows"
#else
#define PLATFORM "Is not linux or windows"
#endif
int main(int argc, char *argv[]) {
puts(PLATFORM);
return 0;
}
完整的解答和示例请参见此处https://dev59.com/wHVC5IYBdhLWcg3w7V33#42040445