当前位置:网站首页>C陷阱与缺陷 第6章 预处理器 6.1 不能忽视宏定义中的空格
C陷阱与缺陷 第6章 预处理器 6.1 不能忽视宏定义中的空格
2022-07-30 17:10:00 【weixin_客子光阴】
不能忽视宏定义中的空格
一个宏如果不带参数,则只需要使用宏名即可,括号无关紧要。预处理器从宏定义中就可以知道宏调用时是否需要参数。
与宏调用相比,宏定义显得有些“暗藏机关”。例如,下面的宏定义中f是否带了一个参数呢?
#define f (x) ((x) - 1)
答案只可能有两种:f(x)或者代表
((x) - 1)
或者代表
(x) ((x) - 1)
第二个答案是正确的,因为在f和后面的(x)之间多了一个空格!所以,如果希望定义f(x)为((x)-1),
必须像下面这样写:
#define f(x) ((x) - 1)
这一规则不适用于宏调用,而只适用于宏定义。因此,在上面完成宏定义后,f(3)与f (3)求值后都等于2。
边栏推荐
- Chapter 5 Advanced SQL Processing
- Chapter 6: Decisive Autumn Moves
- 报错500,“message“: “nested exception is org.apache.ibatis.binding.BindingException: 解决记录
- onenote use
- Lotus 1.16.0 minimum snapshot export import
- MySQL详细学习教程(建议收藏)
- The way of life, share with you!
- DLCM - 基于列表上下文信息的重排序模型
- SLIM: Sparse Linear Methods (TopN推荐)
- 代码越写越乱?那是因为你没用责任链
猜你喜欢

OpenCV形状检测

你是这样的volatile,出乎意料

matlab simulink锂离子电池智能充电策略研究

LeetCode167:有序数组两数之和

Servo System of Hydraulic Steering Gear Based on Fuzzy PID

Shell implementation based on stm32

Error occurred while trying to proxy request The project suddenly can't get up

Tensorflow模型量化(Quantization)原理及其实现方法

FastJson反序列化漏洞(复现)

MySQL超详细安装教程 手把手教你安装MySQL到使用MySQL 最简单的MySQL安装方式,这种方式装,卸载也简单
随机推荐
MySQL超详细安装教程 手把手教你安装MySQL到使用MySQL 最简单的MySQL安装方式,这种方式装,卸载也简单
leetcode:1488. 避免洪水泛滥【二分 + 贪心】
阿里SIM-基于检索的用户行为兴趣CTR模型(Search-based user Interest Model(SIM))
【云商店公告】关于7月30日帮助中心更新通知
Dive deep on Netflix‘s recommender system(Netflix推荐系统是如何实现的?)
Google earth engine如何实现我们时间列表的排列和选取
有没有并发系统设计的经验,我该怎么说?
JMeter笔记4 | JMeter界面介绍
【综合类型第 34 篇】喜讯!喜讯!!喜讯!!!,我在 CSDN 的第一个实体铭牌
Error EPERM operation not permitted, mkdir ‘Dsoftwarenodejsnode_cache_cacach两种解决办法
torch.optim.Adam() 函数用法
Summary of String Copy, Concatenation, Comparison and Split Functions (1)
[MRCTF2020]Ezaudit
JMeter笔记3 | JMeter安装和环境说明
Win11如何把d盘空间分给c盘?Win11d盘分盘出来给c盘的方法
哎,这要人老命的缓存一致问题啊
Various meanings of SQL's PARTITION BY syntax (with examples)
新零售saas小程序如何探索数字化门店的破局之路?
论文阅读之《Color Constancy Using CNNs》
京东获取推荐商品列表 API