c - 为什么这些宏定义的扩展如此不同?
问题描述
#define INC1(a) ((a)+1)
#define INC2 (a) ((a)+1)
#define INC3( a ) (( a ) + 1)
#define INC4 ( a ) (( a ) + 1)
对于 C 语言中的上述声明 INC1 和 INC3 工作正常,但 INC2 和 INC4 给出错误,为什么?
参考:https ://www.geeksforgeeks.org/c-quiz-110-gq/ 第一个问题
解决方案
类函数宏的语法要求左括号紧跟在宏名称之后,中间没有任何空格。
预处理器使用宏名称后的空格来推断宏名称何时结束并且宏的主体何时开始。
例如:
#define INC2 (a) ((a)+1)
这定义了一个非函数式宏,它扩展为(a) ((a)+1)
.
推荐阅读
- css - 元素有延迟和抽搐后的动画
- google-sheets - 如何使用公式在 Google 表格中使用数字作为分隔符来拆分文本
- excel - Power BI 从文件中获取新数据:如何才能做得更好?
- css - CSS如何在属性值在定义范围内时设置样式
- performance - 有效地验证和处理 Redis 排序集中的数据
- reactjs - Asp.Net Core Api 授权
- java - '签名:数组<(out)签名!>!' 已弃用。在 Java 中已弃用
- angular - 如何从父级设置角度自定义输入组件(控制值访问器)的值?
- node.js - 部署我的应用程序时如何使用 .env 文件?
- python - Python脚本在双击时不起作用