码迷,mamicode.com
首页 > 其他好文 > 详细

C Primer Plus读书笔记-预处理器指令

时间:2015-12-03 23:00:55      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

代码中经常看到  #define ,#ifdef

 

#define :明显常量 一般的指令长度仅限与一行代码,除了\(反斜杠线)可以拓展到下一行外。

     一般情况下,每个#define行由三个部分组成。

  1. 第一部分为#define 指令本身
  2. 第二部分为所选择的缩略语,这些缩略语称为宏(macro).  宏的名字中不允许有空格!只能使用字母,下划线(_),和数字之间的组合,第一个字符不能为数字
  3. 第三部分(#define行除了第一第二部分外的部分)。称为替换列表或主体。
  •  预处理器在程序中发现宏的实例后,总会用主体代替该宏,但有一种例外

    宏还可以使用参数,可以创建外形和作用都与函数相似的类函数宏。宏的参数用圆括号括起来  


 

  

  宏的参数与函数的参数不完全一样

  程序运行时,函数调用把参数的传递给了函数,而编译前,宏调用把参数的语言符号传递给程序。

 

#define SQUARE(X) X*X


x=4
Evaluating SQUARE(x) : The result is  16      //A
Evaluating SQUARE(2) : The result is  4    //B  
Evaluating SQUARE(x+2) : The result is  14  //C  
Evaluating 100 / SQUARE(2) : The result is 100  //D

 

  对于A、B结果无异。但是其他结果却不一样。  

  c中 原本的 X*X 代入参数应为 x+2*x+2

  D中 为100/2*2 所以应先算 100/2

     


 

 

   条件编译:

    #ifdef MAVIS

      #define  X 5

    #else

      #define X 6

    #endif

 

    #ifdef指令说明,如果预处理器已经定义了后面的标志符 MAVIS ,则执行所有指令并编译代码,直到下一个#else 或 #endif 出现为止。如果没有定义后面的标志符号MAVIS则执行#else后面的指令和编译,直到#endif为止。 类似于c中的if else。而#ifndef 则是判断后面的标志符是否为未定义的,如果后面的标志符是没有定义的就执行下面的。

 


 

 

 #if 

 #elif 更像c中的if,

 而这些一般后面跟常量整数表达式,若非0则为真。 defined是预处理运算符//defined(para),如果他的参数已经用#define定义过,则返回真,否则返回0

 

C Primer Plus读书笔记-预处理器指令

标签:

原文地址:http://www.cnblogs.com/hams/p/5017603.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!