C语言----预处理

本文详细介绍了C语言的预处理,包括预处理指令的作用、宏定义(如宏展开、带参宏)、文件包含处理,以及预处理在解决头文件重复包含问题上的策略,并通过实例展示了预处理的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

预处理
1、在C语言中所有以#开头的指令都是预处理指令
2、预处理它本身并不属于C语言的一部分,在程序编译之前,先对程序中这些特殊的命令进行“预处理”,根据预处理命令对程序进行相应的处理,经过处理的程序不再包含预处理命令,此时可对程序进行编译。
3、预处理是在编译之前完成的。
宏定义:
#define 标识符 字符串
#define PI 3.14
int main()
{
    double r, s, c, v;
    r = 3.6;
    s = r*r*PI;
    c = 2 * r*PI;
    v = 4.0 / 3 * PI*r*r*r;
    printf("s=%.2f,c=%.2f,v=%.2f\n", s, c, v, );
    return 0;
}
宏展开就是做了一个简单的文本替换工作,不进行增益性检查,宏定义后不必加“;”
宏定义作用域从定义开始到本文件结束,或者到undef结束# undef PI
# define R 5
#define S PI*R*R
对双引号或单引号中的宏不做替换
#define SUM a+3
int main()
{
    int a = 8, b;
    b = 5 * SUM;
    printf("%d\n", b);
    return 0;
}
带参宏
#define ADD(a,b) a+b
#define MUL(a,b) a*b//MUL(i+1,j) i+1*j
//完成两个带参数宏,每个参数和每个整体都要括起来
#define MUL(a,b) ((a)*(b))
int main()
{
    int i = 4, j = 9, k;
    k = ADD(i, j);
    k = MUL(i + 1, j);//k=i+1*j
    printf("%d\n", k);
    return 0;
}
//一定要先换完再做运算
带参宏之间不能有空格即括号和名
宏没有类型定义
#define CALC(a,b,sum,sub) ((sum)=((a)+(b)));((sub)=((a)+(b)))
//可以返回两个值

“文件包含”处理
"“”"和"<>"的区别:查找的位置不一样
//先去当前目录找,找不到再去系统配置路径找,一般自己写用双引号,系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值