有些程序,最终使用的操作系统不确定。对于有些特殊的函数来说,标准库里没有,但在windows和linux下函数名称不一样,这个时候为了能在两种操作系统中都能正确使用,就需要判断操作系统的类型,在不同的case下调用不同的函数。例如字符串忽略大小写比较,windows下使用stricmp,linux下使用strcasecmp。

你看到的这个文章来自于http://www.cnblogs.com/ayanmw

得到的答案 都不好。为什么,因为他们都不知道原理。其实原理很简单,编译器 参数或Makefile添加了宏定义,你才可以这样去判断。比如编译器设置了宏 is_windows,你才能去用。不设置没法用。但是,我敢肯定各种编译器 内置一些宏,比如 MS VC的cl.exe ,LINUX的GNU gcc,在各个平台都会有不同的内置宏的。

所以 如果我搜索 "各个编译器 内置宏 操作系统" 少量的答案中 有一个 :

C++:编写跨平台程序的关键,C/C++中的内置宏定义

分两部分:

操作系统判定:

Windows: WIN32

Linux: linux

Solaris: __sun

编译器判定:

VC: _MSC_VER

GCC/G++: __GNUC__

SunCC: __SUNPRO_C和__SUNPRO_CC

转载自:http://blog.csdn.net/avagrant158/article/details/6298145

还算凑合,但是还不够,各个编译器 到底内置那些宏,我们怎么才能知道呢?你得告诉我方法啊,没法弄,有空了去msdn查查(也不一定能查到,他们不一定说的),gcc可以看源代码,但是那么多代码,老费劲了。

下面根据这个,我写了个跨平台的C++程序。不过 _UNIX WINDOWS俩宏暂时是错误的。不会输出

testDefineOS.cpp源码

#include

#include

using namespace std;

int main(int argc,char **argv){

int no_os_flag=1;

#ifdef linux

no_os_flag=0;

cout<

#endif

#ifdef _UNIX

no_os_flag=0;

cout<

#endif

#ifdef __WINDOWS_

no_os_flag=0;

cout<

#endif

#ifdef _WIN32

no_os_flag=0;

cout<

#endif

if(1==no_os_flag){

cout<

}

return 0;

}

在win /Linux 使用 MS VC cl.exe编译器(不知道如何称呼cl.exe,大家一般不这么叫吧,但是gcc确实可以那么叫),和 gcc编译器的结果

Win Cl.exe编译器结果

==============

D:\>cl.exe testDefineOS.cpp

用于 80x86 的 Microsoft (R) 32 位 C/C++ 优化编译器 16.00.40219.01 版

版权所有(C) Microsoft Corporation。保留所有权利。

testDefineOS.cpp

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xlocale(323) : wa

rning C4530: 使用了 C++ 异常处理程序,但未启用展开语义。请指定 /EHsc

Microsoft (R) Incremental Linker Version 10.00.40219.01

Copyright (C) Microsoft Corporation. All rights reserved.

/out:testDefineOS.exe

testDefineOS.obj

D:\>testDefineOS.exe

It is in WIN32 OS!

D:\>

Linux GCC编译器结果

==================

ayanmw@ayanmw-desktop:~$ g++ test testDefineOS.cpp ;./a.out

It is in Linux OS!

ayanmw@ayanmw-desktop:~$

Windows GCC.exe(MINGW)

=======================

D:\>g++ testDefineOS.cpp

D:\>a.exe

It is in WIN32 OS!

D:\>

关于 C中的预编译宏定义 还请看http://os.chinaunix.net/a2008/1216/989/000000989777.shtml

FROM:http://www.cnblogs.com/ayanmw 我会很高兴的!

查linux还是unix,C、C++判断操作系统是Linux、windows还是Unix相关推荐

  1. Java判断操作系统是Linux还是Windows,以及分隔符处理

    Java判断操作系统是Linux还是Windows_编程学问网 判断操作系统: //String os=System.getProperties().getProperty("os.name ...

  2. 搜索一个问题 C、C++判断操作系统 是 Linux还是windows 还是Unix【编译器内置宏 探索(不是特别满意)】...

    得到的答案 都不好.为什么,因为他们都不知道原理.其实原理很简单,编译器 参数或Makefile添加了宏定义,你才可以这样去判断. 比如编译器设置了宏 is_windows,你才能去用.不设置没法用. ...

  3. java 如何判断操作系统是Linux还是Windows

    String os = System.getProperty("os.name"); if(os.toLowerCase().startsWith("win") ...

  4. linux会自动平板电脑,深度操作系统(Deepin Linux)展示平板概念图 疑似已适配支持触控平板电脑...

    日前第十五届开源中国开源世界高峰论坛顺利召开 , 在论坛上深度科技总经理刘闻欢分享主题为 Linux 桌面而战. 深度科技在会上展示在平板电脑上显示的深度操作系统,尽管目前深度科技并未对有关平板电脑的 ...

  5. linux一运行 风扇很大,操作系统-在Linux和windows 下cpu过高和风扇转不停的原因

    出于对Linux的学习,我在自己的物理机下首先安装了国产的start os操作系统. 刚开始在使用的时候,就发现风扇转不停,我使用资源查看器查看之后,发现一切正常的,cpu跑的很低. 在windows ...

  6. JS使用userAgent判断操作系统和浏览器类型

    1.应用场景: 在做ios和android应用时,需要扫码进行应用的下载,可以通过扫描一个二维码,然后跳到指定的页面,页面中使用js判断操作系统和浏览器类型,然后给出不同的下载地址.这样就可以实现an ...

  7. 第02课 操作系统及Linux 系统介绍

    1.操作系统介绍 操作系统(Operating System,简称OS),是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心. 操作系统的作用是管 ...

  8. JS判断服务端是win还是Linux,js 判断操作系统类型, win7,win10,麒麟都测试过

    判断操作系统 function detectOS() { var sUserAgent = navigator.userAgent; var isWin = (navigator.platform = ...

  9. php如何判断当前的操作系统是linux还是windows

    php_uname()这个函数的意义在于返回当前PHP所运行的系统的信息,下面对这个函数详细说明一下: /** * 功能:返回当前PHP所运行的系统的信息 * @param string $mode ...

最新文章

  1. springboot 不同环境不同的配置
  2. Android NDK调试定位错误
  3. 对于计算机文化的总结,计算机文化基础一级总结
  4. HBase最佳实践-读性能优化策略
  5. 在JDK 9中将InputStream传输到OutputStream
  6. Gridview SummaryItem 格式化数字
  7. JQuery模拟boostrap模态框效果
  8. cefSharp 开发随笔
  9. MFC避免窗口闪烁的方法(OnEraseBkgnd) .
  10. PhotoShop 2022 mac版新增功能
  11. mysql基础之mariadb对表中数据的增删改查
  12. h3c交换机配置教程命令(新手配置交换机详细教程)
  13. 开启“无线网络”,提示:请启动windows零配置wzc服务
  14. Linux内核源代码 学习笔记
  15. 基于负熵(fastICA)的盲源分离
  16. Thread、Runnable、Callable基本操作线程基本概念
  17. 她的话指引了很多人的未来生活———亦舒
  18. AVG提醒:网银大盗疯狂肆虐阿里旺旺
  19. 工程师必看:常见的PCB检测方法有哪些?
  20. 玩VR眼镜对眼睛有影响和危害吗?2018VR眼镜排行榜,什么VR眼镜好推荐,哪个VR眼镜好?

热门文章

  1. 网络信息安全之防火墙的设计 (三)
  2. 三招让你从求职者中脱颖而出(转)
  3. NLP深度学习:近期趋势概述 1
  4. shell-sed脚本
  5. ymPrompt.js消息提示组件
  6. 比特币在贬值但是不会出局
  7. HttpServletRequest和HttpServletResponse简介
  8. Linux--------------安装jdk
  9. ubuntu 命令收集
  10. python3 安装包 源码包 下载慢问题 解决方法