#define 宏定义的使用

#define MAX(x, y)    ( ((x) > (y)) ? (x) : (y) )
#define MIN(x, y)    ( ((x) < (y)) ? (x) : (y) )

在宏定义中要把参数用括号扩起来( ((x) > (y)) ? (x) : (y) )。

因为宏只是简单的文本替换,如果不注意,很容易引起BUG。

多用括号也保证宏定义不会对阅读造成歧义。

错误的例子

#include <stdio.h>#define SQR(x)    (x * x)int main(void)
{int a = 0, b = 3;a = SQR(b + 2);printf("a = %d\n", a);return 0;
}

例子中的意图是将b+2的二次方的值赋给a,但是宏定义会展开为a = (b + 2 * b + 2),所以a被赋值为11,而不是25。

因此宏定义应该修改为

#define SQR(x) ((x) * (x))

C语言代码规范(七)#define相关推荐

  1. 嵌入式C语言代码规范

    C语言代码规范 参考安富莱C语言编码规范 1.文件与目录 1.文件及目录的命名规定可用的字符集是[A-Z:a-z:0-9:._-]. 2.源文件名后缀用小写字母 .c 和.h. 3.文件的命名要准确清 ...

  2. C语言代码规范(编程规范)

    首页 > 编程笔记 > C语言笔记 阅读:7,165 C语言代码规范(编程规范) C语言中文网推出辅导班啦,包括「C语言辅导班.C++辅导班.算法/数据结构辅导班」,全部都是一对一教学:一 ...

  3. go语言代码规范详解

    本规范旨在为日常Go项目开发提供一个代码的规范指导,方便团队形成一个统一的代码风格,提高代码的可读性,规范性和统一性.本规范将从命名规范,注释规范,代码风格和 Go 语言提供的常用的工具这几个方面做一 ...

  4. C语言代码规范(四)命名规则

    一.宏定义全部字母大写,单词间下划线间隔 #define FLASH_PAGE_SIZE 256 #define FLASH_SECTOR_SIZE (4 * 1024) #define FLASH_ ...

  5. C语言代码规范(一)缩进与换行

    一.缩进的空格数为4个.最好配置代码编辑器将TAB键设置为空格替换,避免出现另一个编辑器打开时格式变乱的情况. 例如Notepad++设置 KEIL设置 二."{" 和 " ...

  6. C语言代码规范(九)运算符优先级使用括号提高阅读性

    举简单例子 a = b | c << d + 2; 对于大牛没有问题,对于我这样的码农需要思考一下运算优先级 对于这种情况华某有规范使用括号来表示运算顺序,从而提高代码可阅读性 a = b ...

  7. 2011软考软件设计师:C语言代码规范问题(1

    1. C言语书写规范 1. 1符号命名规则 1. 1. 1符号名包括模块名.常量名.标号名.子顺序名等. 这些名字应该能反映它所代表的实践东西, 具有一定的意义, 用大写字母命名. 除了规则以外, ( ...

  8. C语言代码规范(十)花里胡哨代码鉴赏

    一.宏定义篇 1.作者的目的是防止GPIO口赋值超过1.但是有明显自觉高人一等,瞧不起读者的感觉. uint8_t not_func(uint8_t sw) {return (sw?1:0); }#d ...

  9. C语言代码规范(三)if语句

    一.整型变量与0比较 许多人为了一时之便,模仿布尔变量风格写为如下代码 if(value) {... }if(!value) {... } 应当用 == 或 != 来与0比较 if(0 == valu ...

最新文章

  1. 编写矩形类 计算矩形面积
  2. 详解:智能医学影像分析的前沿与挑战 | 硬创公开课
  3. 2019第十届蓝桥杯比赛总结(B组c/c++)
  4. 【PP操作手册】运行MRP产生计划订单
  5. Vue项目借助浏览调整适配显示器的分辨率
  6. 2021-11-18哈希值
  7. 【机器学习基础】前置知识(一):数学符号及希腊字母
  8. 远程升级stm32程序_STM32IAP远程升级带C#上位机
  9. 简单实现几种常见的前端效果,附代码!
  10. close关闭指定窗口 matlab_Δ-Σ ADC设计笔记一:MATLAB环境设置
  11. python flask热更新_python(flask)+apscheduler定时邮件重发两次的问题
  12. 手机运行服务器无响应,《最强蜗牛》服务器无响应怎么办 服务器无响应解决方法...
  13. 玩Weld-Probe –一站式查看CDI的所有方面
  14. 计算机网络【五】广播通信+以太网
  15. Ajax技术简单入门
  16. js与c语言互相调用,Objc与JS间相互调用
  17. iphone全部机型_【每日一技】iPhone重启手机和关机后开机有什么区别
  18. android studio 2.1.1 优化,Android Studio 2.1 + javaCV 1.2 配置
  19. Java Socket编程基础实例
  20. Photoshop教程_PS渐变工具找不到,怎样导入ps渐变样式?ps渐变使用教程.

热门文章

  1. php7.0 百度百科,PHP 7.0.10正式发布
  2. php html邮件,php发送HTML邮件
  3. css类选择器类名覆盖优先级
  4. CSS 文本溢出时显示省略标记
  5. 从一个帖子看 所谓“知乎” 的真实水平
  6. HTML5 之 简单汇总
  7. cocos2d-x3.0 相对布局(一)
  8. SIT与UAT的分别
  9. const_iterator,const 迭代器
  10. 被问到有没有内核开发经验_一个人就是一个开发团队!成电硬核毕业生自制迷你电脑走红!...