c语言常用的条件编译,C语言条件编译

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

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

编译器

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

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

4154c77009d6e565b21579910a418421.png

Ubuntu_32 gcc

697d5e87789af31d2380f1e4357967b3.png

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

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

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

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

c语言条件编译和预编译

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

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

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

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

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

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

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

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

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

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

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

C语言 条件编译(if )

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

随机推荐

csuoj 1351: Tree Counting

这是一个动态规划的题: 当初想到要用dp,但是一直想不到状态转移的方程: 题解上的原话: 动态规划,设 g[i]表示总结点数为 i 的方案种数,另设 f[i][j]表示各个孩子的总结点数为i,孩子的个 ...

mysql忘记密码解决的办法

[很管用]忘记mysql root密码解决办法 1.编辑MySQL配置文件: 首先停止mysql服务, 然后开始编辑mysql配置文件:vi /etc/my.cnf在[mysqld]配置段添加如下一行 ...

jquery自定义函数

/** *jquery 的拓展方法 *//** * 给btn 添加去除disabled */$.fn.disabled = function() { $(this).each(function(ind ...

centos找不到环境变量 -bash: ls: command not found

#在系统中输入命令,报如下错误: [root@a1 work]# ll-bash: ls: command not found #昨时解决办法:export PATH=/usr/local/sbin: ...

linux存储管理之磁盘阵列

磁盘阵列 RAID ====================================================================================RAID:廉 ...

分布式知识点总结(来自CS-Notes)

转载地址:https://github.com/CyC2018/CS-Notes/blob/master/notes/%E5%88%86%E5%B8%83%E5%BC%8F.md 注:如Paxos等的 ...

c语言中printf()函数中的参数计算顺序

今天看到了一个关于printf()函数计算顺序的问题,首先看一个例子: #include int main() { printf("%d---%d---%d&q ...

jvm的内存分配

java内存分配 A:栈 存储局部变量 B:堆 存储所有new出来的 C:方法区(方法区的内存中) 类加载时 方法信息保存在一块称为方法区的内存中, 并不随你创建对象而随对象保存于堆中; D:本地方法 ...

64位RHEL5系统上运行yum出现"This system is not registered with RHN”的解决方法

在红帽EL5上运行yum,提示“This system is not registered with RHN”,意思是没有在官网上注册,不能下载RH的软件包,替代方案是采用centos源. 1.卸载r ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值