C语音基础-----那些年我们踩过的坑(一)

一、 宏的使用

1.1 宏的展开替换

#include <stdio.h>

#define PING_FANG(x) x * x

int main()
{
    //输入两个数a, b,求(a+b)的平方
    int a, b;
    scanf_s("%d%d", &a, &b);
    printf("%d\n", PING_FANG(a + b));
    return 0;
}

运行结果:
这里写图片描述

PS:
1. 如果我们输入1和2,预期的结果应该是9,但是为什么会是5呢,原因在于宏展开的时,把PING_FANG(1 + 2)展开成1 + 2 * 1 + 2,由于运算符优先级,先算乘法,所以结果为5
2. 如果要得到预期结果有两种改法,一种是把第三行中的x * x改成(x)* (x),第二种改法是把第十行的PING_FANG(a + b)改成PING_FANG((a + b))

1.2 带参数的宏函数的展开顺序

#include <stdio.h>

#define F1(x,y)  x##y
#define F2(x) #x
#define F3(x) F2(x)

int main()
{
    printf("%s\n", F3(F1(8, 9)));
    printf("%s\n", F2(F1(8, 9)));
    return 0;
}

运行结果:
这里写图片描述

PS:
1. 在宏定义中,#是把参数字符串化,##是连接两个参数成为一个整体
2. 从外往内替换宏函数,如果遇到#或者##,则停止替换
3. F3(F1(8, 9))-》F3(89)-》F2(89)-》89
4. F2(F1(8, 9))-》F1(8,9)(因为遇到#停止替换,直接转为字符串)

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值