首页 > 技术文章 > C++基础---C语言部分4

zhouhang 2016-02-28 10:17 原文

一、编译预处理:

1.宏定义:  以  #define 开始,分为带参数和不带参数两种。

  不带参数的宏定义:   #define   PI   3.14

  宏替换只是宏名誉字符串之间的简单替换,不做其他任何数据类型和合法性检查,也不分配内存空间。

  带参数的宏定义:    #define    MUL(x , y)    (x)*(y)

  注意:写带参数宏定义时,宏名与左括号之间不能出现空格,否则空格右边的字符都回作为替代字符串的一部分。

    #define  ADD     (x,y)    x+y    //会认为把ADD宏替换成   (x,y)   x+y

  带参数的宏与函数的区别:

  1. 函数调用在程序运行时处理,在栈中分配内存单元。宏带环则是在编译前进行的,在替换时并不分配内存单元,不进行值传递,没有返回值得概念。
  2. 函数调用时,先计算出实参表达式的值,然后赋值给形参。而宏只是进行简单的替换,不做任何计算。
  3. 函数中的形式参数和实际参数都要有类型,且两者要一致,如果不一致,系统将自动进行类型转换。而宏不存在类型问题。
  4. 宏替换只占用编译时间,因为实在编译前完成的,而函数调用要占用运行时间。

#define   #undef(undef提前终止宏定义的作用域)。

2.文件包含:    #include  <文件名>或  #include "文件名"

3.条件编译:只编译原程序中满足条件的程序段。1.使生成的目标程序短小,减少程序运行时内存。2.方便调试。

  • 根据宏名是否已经定义来确定是否编译某些程序段
  • //暂时跳过去

 

推荐阅读