`
Riddick
  • 浏览: 633226 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

预编译指令与相关宏小结

阅读更多

1.预编译指令

01) #
  空指令,无任何效果

02) #include     
  包含一个源代码文件

03) #define
  定义宏
 
04) #undef
  取消已定义的宏

05) #if
  如果给定条件为真,则编译下面代码
 
06) #else                                  
   作为其他预处理的剩余选项进行编译

07) #ifdef
  如果宏已经定义,则编译下面代码

08) #ifndef
  如果宏没有定义,则编译下面代码

09) #elif
  如果前面的#if给定条件不为真,当前条件为真,则编译下面代码

10) #endif
  结束一个#if……#else条件编译块
 
11) #line
  改变当前的行数和文件名称
 
12) #pragma
  为编译程序提供非常规的控制流信息

13) #error
  停止编译并显示错误信息
 
 
 
 
 
2.与编译器相关的宏

    文中只列出部分相关宏,如果想查看完整的宏列表,可参考MSDN的"Predefined Macros"一节

01) _MSC_VER
    Microsoft 编译器的版本宏.   
    各版本编译器相应的数值如下表所示:
   
        Compiler                               _MSC_VER value
   --------------------                    -----------------------
   C Compiler version 6.0                          600
   C/C++ compiler version 7.0                      700
   Visual C++, Windows, version 1.0                800
   Visual C++, 32-bit, version 1.0                 800
   Visual C++, Windows, version 2.0                900
   Visual C++, 32-bit, version 2.x                 900
   Visual C++, 32-bit, version 4.0                 1000
   Visual C++, 32-bit, version 5.0                 1100
   Visual C++, 32-bit, version 6.0                 1200
   Visual C++, 32-bit, version 2002                1300
   Visual C++, 32-bit, version 2003                1310
   Visual C++, 32-bit, version 2005                1400
   Embedded Visual C++, 32-bit,version 4.0        Cross 1200 - 1202
     
  
02) _MFC_VER
    MFC版本宏.
       
       Version                        _MFC_VER value
    --------------                  -----------------
        4.21                             0x0421
        6.0                              0x0600
        7.0                              0x0700


03) __TIME__
    编译当前源文件的时间,格式为 "hh:mm:ss" 样式的字符串.
   

04) __DATE__
     编译当前源文件的日期,格式为 "Mmm dd yyyy" 样式的字符串.
    
         
05) __FILE__
    编译的当前源文件名.   
   
   
 
 
   
3.实例解说
 
01) 根据_MFC_VER值判断当前的编译环境.
    #if _MSC_VER >= 1400
       // this is Visual C++ 2005
    #elif _MSC_VER >= 1310
       // this is Visual c++ .NET 2003
    #elif _MSC_VER > 1300
       // this is Visual C++ .NET 2002
    #endif
 
   
02) #else if 和 #elif 的细微差别
    #if _MSC_VER < 1202
      //EVC 4.0 complier is cross 1200 - 1202
    #else if _MSC_VER >= 1400
      //Visual C++ 2005 complier is 1400
    #else
      //Visual C++ 2005 complier is 1400
    #endif
   
    这段预编译代码在Evc4.0和visual studio 2005中编译会出错,提示错误为"unexpected #else".此时只要将"#else if"置换成"#elif"即可:
   
    #if _MSC_VER < 1202
      //EVC 4.0 complier is cross 1200 - 1202
    #elif _MSC_VER >= 1400
      //Visual C++ 2005 complier is 1400
    #else
      //Visual C++ 2005 complier is 1400
    #endif
   
    上面代码可以顺利编译通过.
   

03) 包含上级目录的某个头文件
    如果当前文件需要包含上级目录的某个头文件,可采用"..\\"形式,比如:
    #include "..\\Configure.h"
   
    甚至还可以层层递推,定位于上上级目录:
    #include "..\\..\\Configure.h"
   
   
04) 包含当前目录的某个文件夹下的头文件
    如果当前文件需要包含当前目录下的某个文件夹中的某个头文件,可采用".\\"形式,比如:
    #include ".\\Include\\Configure.h"
   
   
05) 判断当前CPU类型
 #ifdef _X86_
    //x86
 #endif

 #ifdef _MIPS_
   //mips

#endif

分享到:
评论

相关推荐

    大学汇编语言教程 已编译的 HTML 帮助文件 的格式

     9.3 与宏有关的伪指令  1 局部标号伪指令  2 取消宏定义伪指令  3 中止宏扩展伪指令  9.4 重复汇编伪指令  1 伪指令REPT  2 伪指令IRP  3 伪指令IRPC  9.5 条件汇编伪指令  1 条件汇编伪指令的功能 ...

    C++大学教程,一本适合初学者的入门教材(part2)

    小结 术语 自测练习 自测练习答案 练习 第2章 控制结构 2.1 简介 2.2 算法 2.3 伪代码 2.4 控制结构 2.5 if选择结构 2.6 if/e1se选择结构 2.7 while重复结构 2.8 构造算法:实例研究1(计数器控制重复) 2.9 ...

    C++大学教程,一本适合初学者的入门教材(part1)

    小结 术语 自测练习 自测练习答案 练习 第2章 控制结构 2.1 简介 2.2 算法 2.3 伪代码 2.4 控制结构 2.5 if选择结构 2.6 if/e1se选择结构 2.7 while重复结构 2.8 构造算法:实例研究1(计数器控制重复) 2.9 ...

    The Art of Assembly Language

    从简单的Hello程序开始,系统而详细地阐述了X86微机汇编语言编程的行种基础知识和编程技巧,内容涉及到数据表示、存储器管理、各种数据类型、过程、与汇编语言相关的体系结构、控制结构、文件、宏指令、位处理指令、...

    精通DirectX.3D图形与动画程序设计.pdf

    1.6 小结 第2章 direct3d程序设计基础 2.1 相关基础知识 2.2 direct3d体系结构 2.3 direct3d对象 2.4 direct3d设备对象 2.4.1 direct3d设备类型 2.4.2 创建direct3d设备对象 2.5 direct3d程序基本结构 . 2.6 最简单...

    8086/8088汇编语言程序设计教程

    7.2.6 与宏有关的伪指令 7.2.7 宏定义的嵌套 7.3 重复汇编 7.3.1 伪指令REPT 7.3.2 伪指令IRP 7.3.3 伪指令IRPC 7.4 条件汇编 7.4.1 条件汇编伪指令 7.4.2 条件汇编与宏结合 7.5 源程序的结合 7.5.1 源程序的结合 ...

    80x86汇编语言程序设计教程

    7.2.6 与宏有关的伪指令 7.2.7 宏定义的嵌套 7.3 重复汇编 7.3.1 伪指令REPT 7.3.2 伪指令IRP 7.3.3 伪指令IRPC 7.4 条件汇编 7.4.1 条件汇编伪指令 7.4.2 条件汇编与宏结合 7.5 源程序的结合 7.5.1 源程序的结合 ...

    80X86汇编语言程序设计

    7.2.6 与宏有关的伪指令 7.2.7 宏定义的嵌套 7.3 重复汇编 7.3.1 伪指令REPT 7.3.2 伪指令IRP 7.3.3 伪指令IRPC 7.4 条件汇编 7.4.1 条件汇编伪指令 7.4.2 条件汇编与宏结合 7.5 源程序的结合 7.5.1 源程序的结合 ...

    windows驱动开发技术详解-part2

     3.3.5 VC编译小结  3.4 查看调试信息  3.4.1 打印调试语句  3.4.2 查看调试语句  3.5 手动加载NT式驱动  3.6 编写程序加载NT式驱动  3.6.1 SCM组件和Windows服务  3.6.2 加载NT驱动的代码  3.6.3 ...

    Windows驱动开发技术详解的光盘-part1

     3.3.5 VC编译小结  3.4 查看调试信息  3.4.1 打印调试语句  3.4.2 查看调试语句  3.5 手动加载NT式驱动  3.6 编写程序加载NT式驱动  3.6.1 SCM组件和Windows服务  3.6.2 加载NT驱动的代码  3.6.3 ...

    C语言入门经典(第4版)--源代码及课后练习答案

     Ivor Horton是世界著名的计算机图书作家,主要从事与编程相关的咨询及撰写工作,曾帮助无数程序员步入编程的殿堂。他曾在IBM工作多年,能使用多种语言进行编程(在多种机器上使用汇编语言和高级语言),设计和实现了...

    我的编程感悟(中文PDF)(共37M二分卷)分卷二

    3.4.7 小结 63 3.5 其他语言 63 3.5.1 Forth 63 3.5.2 Lisp 64 3.5.3 Java 64 3.5.4 Python、Lua、更多 65 第4章 前Windows 时代 67 4.1 386保护模式 68 4.2 VGA 到VESA 70 4.2.1 超越 BGI 70 4.2.2 VGA 72 4.2.3 ...

    我的编程感悟(中文PDF)(共37M二分卷)分卷一

    3.4.7 小结 63 3.5 其他语言 63 3.5.1 Forth 63 3.5.2 Lisp 64 3.5.3 Java 64 3.5.4 Python、Lua、更多 65 第4章 前Windows 时代 67 4.1 386保护模式 68 4.2 VGA 到VESA 70 4.2.1 超越 BGI 70 4.2.2 VGA 72 4.2.3 ...

    8051系列单片机C程序设计完全手册_清晰版_2-2

    2.5 小结 第3章 C语言高级编程 3.1 函数与程序结构 3.1.1 函数的基本知识 3.1.2 返回非整数值的函数 3.1.3 外部变量 3.1.4 作用域规则 3.1.5 头文件 3.1.6 静态变量 3.1.7 寄存器变量 3.1.8 分程序结构 ...

    8051系列单片机C程序设计完全手册_清晰版_2-1

    2.5 小结 第3章 C语言高级编程 3.1 函数与程序结构 3.1.1 函数的基本知识 3.1.2 返回非整数值的函数 3.1.3 外部变量 3.1.4 作用域规则 3.1.5 头文件 3.1.6 静态变量 3.1.7 寄存器变量 3.1.8 分程序结构 ...

    C#微软培训资料

    1.4 小 结 .11 第二章 运行环境 全面了解.NET.12 2.1 .NET 结构.12 2.2 公用语言运行时环境与公用语言规范.13 2.3 开 发 工 具 .17 2.4 小 结 .19 第三章 编写第一个应用程序 .20 3.1 Welcome 程序 .20...

    自己动手写操作系统(含源代码).part1

    我虽然已经有多年不写代码了,但看这本书的时候,让我又重新感受到做程序员的乐趣:用代码建设属于自己的系统,让电脑听从自己的指令,对系统的每个部分都了如指掌。 黑客(hacker)实际是褒义词,维基百科的解释是...

    ExcelVBA程序设计.doc

    1.8 小结 4 第二课 处理录制的宏 4 2.1 为宏指定快捷键 4 2.2 决定宏保存的位置 5 2.3 个人宏工作簿 5 2.3.1 保存宏到个人宏工作簿 5 2.3.2 使用并编辑个人宏工作簿中的宏 5 2.4 将宏指定给按钮 6 2.5 将宏指定给...

    Excel_VBA教程

    1.8 小结 4 第二课 处理录制的宏 4 2.1 为宏指定快捷键 4 2.2 决定宏保存的位置 5 2.3 个人宏工作簿 5 2.3.1 保存宏到个人宏工作簿 5 2.3.2 使用并编辑个人宏工作簿中的宏 5 2.4 将宏指定给按钮 6 2.5 将宏指定给...

Global site tag (gtag.js) - Google Analytics