探究C/C++宏定义的算法原理

本文通过实验探讨了C/C++宏定义的工作原理,发现宏替换是基于单词级别的,并且按照宏定义的先后顺序进行。实验表明,宏定义并不全局生效,而是文本扫描过程,线性扫描文件并逐个替换遇到的单词。例如,`#define a bb #define bb cc #define cc dd`中,单词`a`会被替换为`dd`,而非逐步替换。

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

在OJ开发学习的过程中,需要考虑一个代码文件长度的问题,那么能不能用宏定义来大幅度的增加预处理之后的代码长度呢?

一. 第一次实验:

#include<stdio.h>
#define a bb
#define b cc
int main()
{
    int a;
    return 0;
}

为什么不是这样呢:  变量a  -> bb -> cccc

执行

gcc -E Main.c -o Main2.c

实际上得到的结果:

# 4 "Main.c"
int main()
{
    int bb;
    return 0;
}

只替换了一次 , a - > bb 

这时考虑一个问题,是怎样替换的?

文件指针扫描到a时,把a替换为bb,那么下一次文件指针不管是在当前位置,下一个位置,都应该是b,都应该替换为cc,然而没替换。。。继续实验

 

二. 第二次实验

#include<stdio.h>
#define a bb
#define b cc
int main()
{
    int aa;
    return 0;
}

结果:

# 4 "Main.c"
int main()
{
    int aa;
    return 0;
}

 

没有替换。

在这里省略若干次不明目的的实验过程。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值