宏和预处理器详述

本文详细探讨了C语言中的宏和预处理器指令。宏定义包括带参数和无参数的情况,强调了宏替换时不进行计算的特点。预处理器处理#include、#define等指令,并涉及条件编译。同时,文章提醒了在使用宏时避免的一些常见问题,如不加括号可能导致的错误。

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

          Macro(宏)来源于希腊语,意思就是大,远.在计算机科学中指的是规则,这个规则指定了
输入和输出之间的关系(是不是优点类似于函数?).所有的宏都是一个概念,那就是输入
与输出之间的映射关系,这个和函数本质上是相同的.但是宏和函数处理方式基本上是不同
的,比如在C语言中,宏是在preprocess阶段被替换掉,而函数(讨论一般意义上的函数,不
讨论inline函数)在运行时调入栈中运行.而且不同的语言对宏的处理也是不同的,比如C
语言中,宏是无法区分作用域的(编译单元内的作用域),但是在metapost中,恰恰是可以

在宏体里定义局部变量的.参看wikipedia macros


下面讨论C语言中的宏.
谈到宏,不得不提到preprocess directives(预处理指令).预处理指令是预处理器在
预处理阶段所要执行的操作.具体在宏中就是执行宏替换功能.基本的一个就是#define.

好,现在先谈谈宏的定义.
宏就是处理输入和输出的规则.所以更直观的一点就是带个输入参数.

#define ADD(foo)  foo+10

这样就定义了一个宏add,它的输入是foo,输出是foo+10,规则就是输入加上10.那么在
预处理阶段是如何处理的呢?比如,


bar.c

#define ADD(foo) foo+10

int main()
{
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值