IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    识别不同操作系统的预定义宏

    一根稻草发表于 2015-05-17 00:00:00
    love 0

    1. 判断平台的宏

    编写跨平台的程序,难免要根据不现的操作系统编写不同的代码,最常用的手段就是通过预处理命令#ifdef, #ifndef, #elif, #else, #endif来做, 最常见的就是linux平台和windows平台的程序,一般如下

      #ifdef _WIN32
        //fow windows
      #elif __linux__
        //for linux
      #endif
    

    区分windows和linux的宏有:

    • Windows: WIN32, _WIN32
    • Linux: linux, unix, linux, unix, linux, unux

    windows平台为什么用WIN32来判别,还记得创建“Win32控制台应用程序”么?

    “Win32 应用”是传统术语,指使用消息循环而非 Microsoft 基础类 (MFC)、活动模板库 (ATL) 或 .NET Framework 等框架直接处理 Windows 消息的应用。 虽然此术语为“Win32”,但它可指 32 位或 64 位应用。

    操作系统宏大全参见predef

    OS MACRO
    linux linux, __linux, __linux__
    windows _WIN32
    MacOS macintosh
    Android __ANDROID__
    gnu linux __gnu_linux__
    solaris sun, __sun
    FreeBSD __FreeBSD__
    OpenBSD __OpenBSD__

    2. ubuntu 12.04 predefined macros

    ubuntu 12.04下查看gcc编译器的预定义宏

        onestraw@ubuntu:~/code/macro$ gcc -dM -E -x c /dev/null |grep -i "unix"
        #define __unix__ 1
        #define __unix 1
        #define unix 1
        onestraw@ubuntu:~/code/macro$ gcc -dM -E -x c /dev/null |grep -i "linux"
        #define __linux 1
        #define __linux__ 1
        #define __gnu_linux__ 1
        #define linux 1
        onestraw@ubuntu:~/code/macro$ 
    

    命令gcc可以替换成g++,cpp

    3. 参考资料

    • gcc predefined macros
    • visual studio 2013预定义宏
    • Win32 桌面应用程序
    • C/C++ tip: How to list compiler predefined macros
    • Pre-defined Compiler Macros


沪ICP备19023445号-2号
友情链接