C语言条件编译
使用与平台有关的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__
- GCC
- UNIX
- 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以上
- MFC App、PC机上(Windows CE没有定义)
- 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
- 32bit
- Cygwin
- Cygwin
#ifdef __CYGWIN__ - 32bit版Cygwin(现在好像还没有64bit版)
#ifdef __CYGWIN32__ - MinGW(-mno-cygwin指定)
#ifdef __MINGW32__
- Cygwin
程序测试:
#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语言条件编译的更多相关文章
- (五)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源程序->编译预处理-> ...
- 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 <stdio ...
- C语言 条件编译(if )
#include <stdio.h> #define NUM -1 int main(int argc, const char * argv[]) { #if NUM > 0 pri ...
随机推荐
- Java使用AES加密解密
AES加密机制: 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准. 这个标准用来替代原先的 ...
- java异常及日志注意事项
一.异常注意事项 简单整理了下关于异常的规范: 1) 在异常处理模块中应提供精确.易读的错误原因信息. 2) 不要处理能够避免的异常. 3) 一个方法不应该抛出太多类型的 ...
- parcelable 和 serializable 区别
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha serializable 是 java 中的 序列化 接口. parcelable 是 ...
- BZOJ2055 80人环游世界 网络流 费用流 有源汇有上下界的费用流
https://darkbzoj.cf/problem/2055 https://blog.csdn.net/Clove_unique/article/details/54864211 ←对有上下界费 ...
- 【推导】The 16th UESTC Programming Contest Preliminary L - Foxtrot
题意:有n瓶药剂,其中只有一瓶药剂有毒.让你用最少的小白鼠试出哪瓶有毒.你只有一次给任意只小白鼠各喂食任意种类药剂的机会. m只老鼠就能对应2^m种“生死状态”的组合,给每种状态分配一个种类的药剂,然 ...
- HTTP 499 状态码 nginx下 499错误[转]
日志记录中HTTP状态码出现499错误有多种情况,我遇到的一种情况是nginx反代到一个永远打不开的后端,就这样了,日志状态记录是499.发送字节数是0. 老是有用户反映网站系统时好时坏,因为线上的产 ...
- 批量导入--EasyPOIPOI
easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言( ...
- bzoj 3283 扩展BSGS + 快速阶乘
T2 扩展BSGS T3 快速阶乘 给定整数n,质数p和正整数c,求整数s和b,满足n! / pb = s mod pc 考虑每次取出floor(n/p)个p因子,然后将问题转化为子问题. /*** ...
- Loj10166 数字游戏2
题目描述 由于科协里最近真的很流行数字游戏,某人又命名了一种取模数,这种数字必须满足各位数字之和 modN 为 000.现在大家又要玩游戏了,指定一个整数闭区间 [a,b][a,b][a,b],问这个 ...
- tyvj 1031 热浪 最短路
热浪 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://tyvj.cn/p/1031 Description 德克萨斯纯朴的民眾们这个夏天正在遭受 ...