C语言之预处理

预处理指令:

在代码编译(01)之前执行的指令叫预处理指令。

所有的预处理指令都是以#开头。

预处理的位置是随便写的

预处理指令的作用域:从编写指令的那一行开始一直到文件结尾

#undef 宏名   从这行代码开始,宏失效

宏名一般用大写(或者在宏名前加“k,代表常量),变量名一般用小写

一、宏定义

格式:#define 宏名 值

#define COUNT 5  //在代码编译前把所有的COUNT都换成5,除了字符串
int main()
{
int ages[COUNT]; = {1, 2, 67, 89, 90};  //数组长度值只能用常量或者宏
for(int i=0; i<COUN ; i++)  //i<常量或宏,不能用变量
{
    printf(“%d\n”, ages[i]);
}
return 0;
}

二、带参数的宏定义

带参数的宏定义效率比函数高

#define sum(v1, v2) ((1)+(v2))  //v1+v2应该加括号,否则会出现运算顺序问题,因为宏定义在执行时,只作文本替换,不管运算顺序
#define pingfang(a) ((a)*(a))  //应该把a括上,同样会出现运算顺序的问题
int main()
{
    int a = 10;
    int b = 20;
    int c = sum(a, b);
    int d = pingfang(10)/pingfang(2);  //10*10/2*2
    int e = pingfang(5+5);  //5+5*5+5
    printf(“c=%d, d=%d, e=%d\n”, c, d, e);
    return 0;
}

三、条件编译

在很多情况下,我们希望程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执行),这就是条件编译。

只要写了#if,在最后面必须加上#endif

第一种:

#if 条件1

...code1...

#elif 条件2

...code2...

#else

...code3...

#endif

#define A 10
int main()
{
int a = 10;
#if (A == 10)
    printf(“a是10\n”);
#elif (A == 5)
    printf(“a是5\n”);
#else
    printf(“a是其他值\n”);
#endif  //必须写endif,因为如果没有结束if的标志,会导致以后的代码都不执行编译
return 0;
}

第二种:

#if defined(MAX)  //如果定义了MAX这个宏

...code...

#endif

 

#if !defined(MAX)  //如果没有定义MAX这个宏

...code...

#endif

 

//同上

#ifdef MAX

...code...

#endif

 

#ifndef MAX

...MAX...

#endif

四、文件包含

1.<>表示系统自带的文件,""表示自定义的文件

2.不允许 循环包含,比如a.h包含b.hb.h包含a.h

开发中常常出现多次重复包含同一头文件的情况,这样会降低编译效率,为了防止这一情况,可以再头文件中定义条件编译:

test.h

#ifndef TEST.H  //这个宏通常定义为大写的文件名,定义为空即可,防止不同的头文件定义相同的宏

#define TEST.H

函数声明code

#endif


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值