C语言之预编译指令

宏在C中预编译指令是很重要的一个部分,所以必须要把它掌握:

  1. 预编译指令的概念
    1. 预编译指令指的是C源码在编译之前的预编译阶段需要处理的指令
    2. 预编译指令一般以#开头,可以定义在除函数体内的任何C源码位置
    3. 有以下几种预编译指令类型
      1. 文件包含指令:#include
      2. 宏定义:#define与#undef
      3. 条件编译指令:#if与#endif
  2. 宏定义
    1. 宏定义定义在函数之外,宏定义属于C语言中预编译指定的一部分
    2. 宏定义一般以#开头,有一下几种宏定义类型
      1. #define 定义一个常量,函数或者执行代码的宏
      2. #undef 取消之前的通过#define定义的宏,一旦宏被取消,后面的代码将不能使用这个宏
      3. 在#define与#undef范围内的所有代码段称为宏的作用范围,如果仅仅定义了#define而没有定义#undef,则该宏的作用范围从#define定义开始,一直到程序末尾
      4. #ifdef,如果该宏已经定义,则此行到#endif之间的语句会被执行
      5. #ifudef,如果该宏没有定义,则此行到#endif之间的语句会被执行
      6. #endif,结束#ifdef或者#ifudef的作用范围
      7. 4,5,6常常组合起来用于防止重复包含或者重复定义引用
    3. 宏定义在预编译阶段进行的是文本替换操作,例如假设有宏定义#define PI 3.1415926,则会在预编译阶段把宏作用范围内的所有的PI文本替换为3.1415926,这种文本替换操作也可以叫做宏替换或者宏扩散
    4. 宏替换不会对文本的格式,标题,空格或者缩进做任何妥协,仅仅是严格按照文本做替换而已,举例:假设文本中有3PI这样的格式,则会宏替换成33.1415926,这个特点需要注意
    5. 宏定义虽然可以在一部分情况下代替常量,但是和真正的常量const定义还是有本质的区别的,但是在某些情况下,宏定义会比const更简洁高效
    6. 宏定义可以定义一个函数或者代码执行块,例如:#define S(r) (PI * r * r);
    7. 根据4得到,宏定义只是进行机械的文本替换,所以类似与8中的宏定义,如果取消了括号定义成#define S(r) PI * r * r;,则有可能在运算符优先级的影响下,会进行错误的运算逻辑,所以需要加上括号,而且一般在使用宏定义函数或者代码块等除了常量之外的运算逻辑式的时候,都是需要加上括号的
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值