使用与平台有关的C语言函数,可能会使得程序不具有可移植性。比如Socket编程、多线程编程等是与平台有关的。

若想将程序做成平台无关的就需要用到与平台相关的条件编译

下面转自:http://blog.csdn.net/immcss/article/details/3881827

    • 编译器
      • GCC
        #ifdef __GNUC__

        • #if __GNUC__ >= 3 // GCC3.0以上
      • Visual C++
        #ifdef _MSC_VER(非VC编译器很多地方也有定义)
        • #if _MSC_VER >=1000 // VC++4.0以上
        • #if _MSC_VER >=1100 // VC++5.0以上
        • #if _MSC_VER >=1200 // VC++6.0以上
        • #if _MSC_VER >=1300 // VC2003以上
        • #if _MSC_VER >=1400 // VC2005以上
      • Borland C++
        #ifdef __BORLANDC__
    • UNIX
      • UNIX
        #ifdef __unix
        or
        #ifdef __unix__
      • Linux
        #ifdef __linux
        or
        #ifdef __linux__
      • FreeBSD
        #ifdef __FreeBSD__
      • NetBSD
        #ifdef __NetBSD__
    • Windows
      • 32bit
        #ifdef _WIN32(或者WIN32)
      • 64bit
        #ifdef _WIN64
      • GUI  App
        #ifdef _WINDOWS
      • CUI  App
        #ifdef _CONSOLE
      • Windows的Ver … WINVER
        ※ PC机Windows(95/98/Me/NT/2000/XP/Vista)和Windows CE都定义了
        • #if (WINVER >= 0x030a) // Windows 3.1以上
        • #if (WINVER >= 0x0400) // Windows 95/NT4.0以上
        • #if (WINVER >= 0x0410) // Windows 98以上
        • #if (WINVER >= 0x0500) // Windows Me/2000以上
        • #if (WINVER >= 0x0501) // Windows XP以上
        • #if (WINVER >= 0x0600) // Windows Vista以上
      • Windows 95/98/Me的Ver … _WIN32_WINDOWS
        • MFC App、PC机上(Windows CE没有定义)
          #ifdef _WIN32_WINDOWS
        • #if (_WIN32_WINDOWS >= 0x0400) // Windows 95以上
        • #if (_WIN32_WINDOWS >= 0x0410) // Windows 98以上
        • #if (_WIN32_WINDOWS >= 0x0500) // Windows Me以上
      • Windows NT的Ver … _WIN32_WINNT
        • #if (_WIN32_WINNT >= 0x0500) // Windows 2000以上
        • #if (_WIN32_WINNT >= 0x0501) // Windows XP以上
        • #if (_WIN32_WINNT >= 0x0600) // Windows Vista以上
      • Windows CE(PocketPC
        #ifdef _WIN32_WCE
      • Windows CE … WINCEOSVER
      • Windows CE
        WCE_IF
      • Internet Explorer的Ver … _WIN32_IE
    • Cygwin
      • Cygwin
        #ifdef __CYGWIN__
      • 32bit版Cygwin(现在好像还没有64bit版)
        #ifdef __CYGWIN32__
      • MinGW(-mno-cygwin指定)
        #ifdef __MINGW32__

程序测试:

 #include<stdio.h>
int main()
{
printf("The OS :");
#ifdef __linux
printf("Linux\n");
#endif #ifdef _WIN32
printf("win 32\n");
#endif #ifdef _WIN64
printf("win 64\n");
#endif printf("The Compiler : ");
#ifdef __GNUC__
printf("GCC\n");
#endif
#ifdef _MSC_VER
printf("VC\n");
#endif
printf("Test Over!!!");
return ;
}

执行结果:

win7_32 CodeBlocks

Ubuntu_32 gcc

C语言条件编译的更多相关文章

  1. (五)c语言条件编译#ifdef与#if defined

    c语言条件编译#ifdef与#if defined defined NAME是用来判断NAME是否被定义了(被用define定义了). #ifdef NAME == #if defined(NAME) ...

  2. c语言条件编译#ifdef与#if defined

    c语言条件编译#ifdef与#if defined   c语言条件编译#ifdef与#if defined 摘自:https://www.cnblogs.com/zhangshenghui/p/566 ...

  3. c语言条件编译和预编译

    转自http://www.cnblogs.com/rusty/archive/2011/03/27/1996806.html 一.C语言由源代码生成的各阶段如下: C源程序->编译预处理-> ...

  4. C语言条件编译及编译预处理阶段(转)

    一.C语言由源代码生成的各阶段如下: C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件 其中 编译预处理阶段,读取c源程序,对其中的 ...

  5. 【转】C语言条件编译及编译预处理阶段

    原文: http://www.cnblogs.com/rusty/archive/2011/03/27/1996806.html 1. 宏定义(宏代换,宏替换,宏: 宏定义是C语言提供的3中预处理功能 ...

  6. C语言条件编译(#if,#ifdef,#ifndef,#endif,#else,#elif)

    1.条件编译介绍 条件编译(conditional compiling)命令指定预处理器依据特定的条件来判断保留或删除某段源代码.例如,可以使用条件编译让源代码适用于不同的目标系统,而不需要管理该源代 ...

  7. 条件编译,C语言条件编译详解

    条件编译是指预处理器根据条件编译指令,有条件地选择源程序代码中的一部分代码作为输出,送给编译器进行编译.主要是为了有选择性地执行相应操作,防止宏替换内容(如文件等)的重复包含.常见的条件编译指令如表 ...

  8. C语言-条件编译使用分析

    1.基本概念 条件编译的行为类似于C语言中的if…else… 条件编译是预编译指示命令,用于控制是否编译某段代码 2.实例分析 条件编译初探     22-1.c #include <stdio ...

  9. C语言 条件编译(if )

    #include <stdio.h> #define NUM -1 int main(int argc, const char * argv[]) { #if NUM > 0 pri ...

随机推荐

  1. Mac下思维导图Xmind使用入门

    1.软件下载 中文官网地址: http://www.xmindchina.net   安装过程比较傻瓜化,这里就不截图了. 2.用Xmind设计软件模块: 1>.新建一个思维导图,如下图,选 ...

  2. 《JAVA软件结构与数据结构》第一周学习总结

    学号 20172326 <JAVA软件结构与数据结构>第一周学习总结 教材学习内容总结 软件质量的几大特性 增长函数与大O记法 大O记法用来表示表示增长函数,从而来表示算法的复杂度 算法的 ...

  3. .NET常用的异常类型及其中文说明

    基异常类型: 类 说明 System.Exception 所有异常的基类型 System.ApplicationException 发生非致命应用程序错误时引发的异常 System.SystemExc ...

  4. [js]DOM 篇

    DOM 是 JavaScript 操作网页的接口,全称为“文档对象模型”(Document Object Model).它的作用是将网页转为一个 JavaScript 对象,从而可以用脚本进行各种操作 ...

  5. UNP学习总结(二)

    本文是UNP复习系列的第二篇,主要包括了以下几个内容 UNIX系统下5种I/O模型 阻塞.非阻塞,同步.异步 epoll函数用例 一.Unix下的五种可用I/O模型 阻塞式I/O模型 阻塞式I/O是最 ...

  6. 使用Python发送HTML格式的邮件(收到的邮件有发送方才是正解)

    发送html格式的和普通文本格式差不多,只是MIMEText(content,"html","utf-8"))与MIMEText(content,"p ...

  7. django设置数据库事务,通过异常处理回滚事务

    1.setting.py配置文件,开启事务ATOMIC_REQUESTS DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql' ...

  8. CXF发布webservice

    http://wenku.baidu.com/link?url=dTJpXcL0TXslGAYYC6SSOrPGvjyEb974ZGx9-0dymU32YDjxuP8DwlI1sFpPCGqu_ywW ...

  9. 【搜索+DP】codevs1066-引水入城

    [题目大意] 一个N行M列的矩形,如上图所示,其中每个格子都代表一座城 市,每座城市都有一个海拔高度.现在要在某些城市建造水利设施.水利设施有两种,分别为蓄水厂和输水站.蓄水厂的功能是利用水泵将湖泊中 ...

  10. [LeetCode] Pacific Atlantic Water Flow 题解

    题意 题目 思路 一开始想用双向广搜来做,找他们相碰的点,但是发现对其的理解还是不够完全,导致没写成功.不过,后来想清楚了,之前的错误可能在于从边界点进行BFS,其访问顺序应该是找到下一个比当前那个要 ...