C预处理指令

预处理指令包括:文件操作,宏定义,条件编译

一.文件包含<掌握>    #include< .h>   

二.宏定义<熟悉>

三.条件编译<了解>

宏定义

是什么?      

是一个替换代码的预处理指令

有什么用?

可以在编译之前进行代码替换.

怎么用?

开始替换:#define 被替换内容 替换成的内容

如:#define kLength 6 表示从这行开始下面所有代码中的kLength 替换成6

结束替换: #undef 被替换内容   如:#undef kLength   表示到这一行,宏定义失效.

什么时候用?

当需要用一些重复性代码或简单的函数运算时,可以用宏定义提高效率

特点

1.命名尽量以大写或小写k开头.便于区分.(规范)

2.被双引号引起来的不会被替换

3.宏定义只会做代码替换,不会关注任何逻辑,容易出现优先级错误(加括号解决).

4.替换可以设置作用域.如果不设置,作用域则是这行代码的出现到代码的最后一行

  
  
  1. /*宏定义的用法*/
  2. #include <stdio.h>
  3. #define kLength 5
  4. //宏定义函数
  5. #define kAdd(a,b) ((a)*(b))
  6. int add(int a,int b);
  7. int main(){
  8.    int arr1[kLength];
  9.    int arr2[kLength];
  10.    int arr3[kLength];
  11.    printf("%d\n",kLength);
  12.    printf("%d\n",kLength+10);
  13. //#undef kLength
  14.   // #undef kAdd(a,b)
  15.  //  int kLength=10;//int 5=10;
  16.    printf("%d\n",kLength+10);
  17.    //被双引号的引起来的不会被替换
  18.   // printf("kLength\n");
  19.    int b=add(2,3);
  20.    int c=kAdd(2,3);//int c=2+3;
  21. //宏定义只会做代码替换,不会关注任何逻辑,容易出现优先级错误(加括号解决).
  22.    int d=kAdd(2,3)/kAdd(4,5);
  23.   // int d=(2+3)/(4+5);
  24.    int f=kAdd(2+3,3+4);
  25.    //int f=(2+3)*(3+4);
  26.    printf("%d,c=%d,d=%d,f=%d\n",b,c,d,f);  
  27.   // 替换可以设置作用域.如果不设置,作用域则是这行代码出现到代码的最后一行
  28.    #undef kLength
  29.    return 0;
  30. }
  31. int add(int a,int b){
  32.    return a+b;
  33. }

条件编译

是什么?

是一个根据条件编译代码的预处理指令

有什么用?

可以让一段代码只在满足条件才编译,提高编译效率

怎么用?

通用: #if 条件表达式     #elif 条件表达式    #else

相关:  #ifdef  宏名 表示定义了宏  #ifndef 宏名  表示没有定义宏

#endif  结束条件编译.注意一定要加.


       与if 语句的区别:if语句全部编译,满足条件才执行;

                       #if满足条件才编译

特点:

1.条件编译不能访问需要编译后才能执行的代码.

2.条件编译不需要用大括号,所以必须加上结束标识,否则涵盖下面的所有代码

3.条件编译一般跟宏定义配合使用,防止重复包含及交叉包含




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值