宏不是函数如果我们定义一个宏:
#define max(a,b) a>b?a:b 当我们执行一个语句:
3+max(1,3); 我们期望的答案应该是6才对,其实呢,运行之后的答案1。与宏定义相挂钩的就是优先级,算数运算符的优先级高于条件运算符,展开如下:
3+1>3?1:3,首先进行算符运算符的运算,即4>3?1:3,所以答案为1。请注意宏定义中的括号,这些括号的作用就是预防引起优先级相关的问题。有些专家建议在
c语言中只要牢记两个优先级就够了,乘除法优先级高于加减法,在设计其它操作符时,一律加上括号。
4、宏定义不是说明或语句,在行末不必加分号
比如,加上分号则连分号也一起置换。
5、宏不是类型定义
首先定义一个宏:
#define pchar char* 再用pchar 定义两个变量,之后用操作符sizeof读取变量所占用内存大小,如果是指针类型的就占4个字节,如果是字符型的就占1个字节。
结果占用空间不一样,变量类型自然不一样,所以宏定义不是类型定义。那么,如果我换成typedef来定义类型呢?
宏定义只是简单的字符串代换,是在预处理完成的,而typedef是在编译时处理的,它不是作简单的代换,而是对类型说明符重新命名。被命名的标识符具有类型定义说明。
6、与之相关的宏定义
编写程序过程中,很多都需要条件编译,来看一个常用的使用方法。
#if defined(credit) 7、总结
宏的本质是代码替换。
意在欧洲市场?OPPO完成迄今最大规模专利收购
成飞民机公司已成为了波音787方向舵的全球唯一供应商
为“担当赶超、婺城图强”提供坚强的网络安全保障和有力的信息化支撑
论自恢复保险丝在LED显示屏的保护作用
高度机电一体化汽车系统测试解决方案
关于宏定义的错误理解
波士顿动力的商业之路 或将从机器人安卓开始
金河田峥嵘Z6评测 的确是一款值得购买的机箱
基于PLC的控制系统实现立体停车库的设计
群创专注于指纹识别 可以识别45-60个指纹特点
英特尔决心布局FPGA,助力其成长发展
英国大型银行首次与加密货币交易所Coinbase达成了合作
七家移动转售企业首批入围,物联网转售将开启怎样的新时代?
安防监控补光灯板的辐照度一般是多少?
满足新能源充电标准 长园维安MOS模块创新封装
模块化路由器的分类
网约车是否安全?出行服务过程中是否能保证乘客和车主的双方的安全?
Maxim无线/射频功率放大器选择指南
松下实现了支持大电流的间距0.4mm的基板对基板/基板对FPC连接器的产品化
新型双U缝隙的UWB天线的设计与研究