小智 7
快速谷歌搜索显示这一点
#if defined(_WIN64)
/* Microsoft Windows (64-bit). ------------------------------ */
#elif defined(_WIN32)
/* Microsoft Windows (32-bit). ------------------------------ */
#endif
Run Code Online (Sandbox Code Playgroud)
操作系统识别宏由所有C/C++编译器预定义,以启用#if/#endif集来包装特定于操作系统的代码.这在跨平台代码中通常是必需的,这些代码必须使用低级库函数来实现快速磁盘I/O,进程间通信或线程.虽然Windows和其他操作系统之间的差异很大,但UNIX风格的操作系统之间的差异甚至可能需要#if /#endif结构.本文调查了常见的编译器,并展示了如何在编译时使用预定义的宏来检测常见的OS.
这个问题很奇怪.您无法提供可在多个平台上运行的可执行文件.所以明显的答案是:在一个平台上编译它:如果它运行,那就是你所在的平台; 如果不是你在其他平台上.
假设你确实有单独的可执行文件,那真的没有真正的答案.对于初学者,您认为"不同的平台"是什么?Linux上的Sparc和Linux是否在PC上的不同平台?两个不同版本的Linux怎么样?在CygWin下运行怎么样?但是,无论您如何定义它,您可能都需要为每个平台进行单独的测试.但问题很愚蠢,因为除了考虑不同版本的不同平台之外,每个平台都需要一个独特的可执行文件,这意味着你必须在编译时区别对待
仅供记录:对于初学者,我使用boost :: filesystem,并尝试读取目录"c:\\"和"/usr".从理论上讲,你可以"c:\\"在Unix下的当前目录中找到一个目录,或者"/usr"在Windows下用C:中命名的目录,但是赔率肯定是反对它的.否则,请尝试各种文件.Windows下几乎肯定不存在该目录,即使它存在,也不会有各种Unix下的动态结构.并且结构因Unix而异,因此您甚至可以区分Solaris和Linux."/proc/myPID"
如果比较只是在PC上的Windows和Linux之间,当然,最简单的是在32位模式下编译,并获取局部变量的地址.如果它大于0x8000000,那么你就是Linux; 如果它更少,Windows.
| 归档时间: |
|
| 查看次数: |
3134 次 |
| 最近记录: |