C语言条件编译

简介: 使用与平台有关的C语言函数,可能会使得程序不具有可移植性。比如Socket编程、多线程编程等是与平台有关的。 若想将程序做成平台无关的就需要用到与平台相关的条件编译。 下面转自:http://blog.

使用与平台有关的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__

程序测试:

 1 #include<stdio.h>
 2 int main()
 3 {
 4     printf("The OS :");
 5     #ifdef __linux
 6         printf("Linux\n");
 7     #endif
 8 
 9     #ifdef _WIN32
10         printf("win 32\n");
11     #endif
12 
13     #ifdef _WIN64
14         printf("win 64\n");
15     #endif
16 
17     printf("The Compiler : ");
18     #ifdef __GNUC__
19         printf("GCC\n");
20     #endif
21     #ifdef _MSC_VER
22         printf("VC\n");
23     #endif
24     printf("Test Over!!!");
25     return 0;
26 }

执行结果:

win7_32 CodeBlocks

Ubuntu_32 gcc

 

相关文章
|
2月前
|
程序员 编译器 C语言
C语言中的预处理器指令,涵盖其基本概念、常见指令(如`#define`、`#include`、条件编译指令等)、使用技巧及注意事项
本文深入解析C语言中的预处理器指令,涵盖其基本概念、常见指令(如`#define`、`#include`、条件编译指令等)、使用技巧及注意事项,并通过实际案例分析,展示预处理器指令在代码编写与处理中的重要性和灵活性。
68 2
|
3月前
|
C语言
【总结】单片机重点知识总结记录之C语言条件编译(五)
【总结】单片机重点知识总结记录之C语言条件编译(五)
|
7月前
|
Unix 编译器 C语言
C语言中的条件编译:探索编译时的决策
C语言中的条件编译:探索编译时的决策
|
编译器 C语言
C语言宏定义与条件编译
C语言宏定义与条件编译
126 0
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
|
编译器 C语言
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
|
存储 自然语言处理 程序员
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
|
编译器 C语言
【C语言】文件包含及条件编译
【C语言】文件包含及条件编译
139 0
|
C语言 程序员
C语言的条件编译
预处理程序提供了条件编译的功能。 可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。条件编译有三种形式,下面分别介绍: 1. 第一种形式: #ifdef 标识符 程序段1 #else 程序段2 #endif 它的功能是,如果标识符已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空
1212 0