小心宏定义出错

2023-11-16

         当宏参数在宏定义中出现超过一次,这个宏作用在复杂的表达式里就可能出错,导致不可预料的结果,

我还记得我有一次为这个问题导致的出错,查了一个星期,最后整整debug了一个工作日才找到这个问题,

所以提醒大家一定要小心。

 

       比如 #define MAX(a, b) ( (a) > (b) ? (a) : (b) )

                 #define ABS(x)  ( (x) > 0 ? (x) : (-x) )

 

定义 int j = 5, k =8;

      正常情况:

     MAX(j, k);

     ABS(j, k)

   都OK,

 

    但是下面这种情况呢?

    MAX(j++, k++);

    ABS(j++);

 

    如果无意中在代码里出现上面这种情况,你会死得很惨,所以当大家宏参数在宏定义中出现超过一次,一定要谨慎,

实在不能确定,还是老老实实改成函数拉到了。

 

作者(Author):smilelance
时间( Time ):2007.09.28
出处( From ):http://blog.csdn.net/smilelance

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小心宏定义出错 的相关文章

  • DataWhale-VCED项目学习-2Jina

    Jina Jina是多模态中存储数据以及处理数据的组件 它可以将非结构化数据 图像 文档 视频等 转化为向量数据 并结合Jina其它的相关组件设计 可以将这些向量数据利用起来 实现多模态相关应用 安装 安装 Jina 需要 Python3

随机推荐

  • git简单命令

    登录自己的账号与邮箱 git config global user name wei gir config global user email ww 进入一个文件夹中之后 git init 初始化仓库 生成 git文件 该文件夹称为工作树
  • 剑指offer-17 合并链表

    2个链表 本来都是从小到大的顺序排列的 现在要求合并 合并后依然从小到大 思路 先设定一个pointer指针 指向新链表的新节点 1 如果链表1为空 则新链表就是链表2 反之一样 2 创建一个指针pointer 在子链表都不为空时 比较两个
  • SQL注入——联合注入

    SQL注入原理 攻击者通过构造不同的SQL语句来实现对数据库的操作 SQL注入的本质 我们也能操作别人的数据库 数据库结构 库 就是一堆表组成的数据集合 表 类似Excel 有行和列组成的二维表 字段 表中的列称为字段 记录 表中的行称为记
  • $LSB_SUB_PARM_FILE

    LSB SUB PARM FILE是一个环境变量 用于指定包含作业提交所需参数的文件路径 这个文件通常由作业脚本生成 并在作业提交命令中使用该变量将此文件与作业一起提交给集群管理器 LSB SUB PARM FILE所生成的文件中包含了作业
  • BAM网络

    摘要 从混叠区域恢复纹理信息一直是单图像超分辨率 SISR 任务的主要挑战 这些区域通常淹没在噪波中 因此我们必须在抑制噪波的同时恢复纹理细节 为了解决这个问题 我们提出了一种平衡注意机制 BAM 它由Avgpool通道注意模块 ACAM
  • git使用手册,有这些就够了^_^

    日常工作中 有了这些git命令 解决你代码提交与合并上的痛点 再也不怕代码和别人冲突了 再也不用为合并代码 冲掉别人代码而头痛了 一 clone仓库中的代码 git clone svn addr git 其中 svn addr git为代码
  • 面试官:70% 的面试者挂在 JVM !

    无论什么级别的Java从业者 JVM都是进阶时必须迈过的坎 不管是工作还是面试中 JVM都是必考题 如果不懂JVM的话 薪酬会非常吃亏 近70 的面试者挂在JVM上了 掌握了JVM机制 就等于学会了深层次解决问题的方法 对于Java开发者而
  • ABP 框架官网学习资料

    ABP是 ASP NET Boilerplate Project ASP NET样板项目 的简称 新思想 新技术 新架构 更好更快的开发现代ASP NET应用程序 ASP NET Boilerplate是一个用最佳实践和流行技术开发现代WE
  • java数字字符串,非数字字符串前补零,后补零到指定位数

    java数字字符串 非数字字符串前补零 后补零到指定位数 一个Java有用的小工具类 import java text DecimalFormat import java util Arrays 位数不够补零 author hexionly
  • Matlab2021a安装教程

    目录 一 资源文件 二 安装 一 资源文件 名称 Matlab R2021a 大小 17 11GB 语言 简体中文 安装环境 Win10 64位下载链接 https pan baidu com s 1OIyhX8kpVfydlo aOnbT
  • XML与JAVABean的相互转换

    一 XML生成JAVABean 1 将以下xml报文转为JavaBen实例
  • 大整数相乘 C++

    题目描述 有两个用字符串表示的非常大的大整数 算出他们的乘积 也是用字符串表示 不能用系统自带的大整数类型 输入描述 空格分隔的两个字符串 代表输入的两个大整数 输出描述 输入的乘积 用字符串表示 示例 输入 721065475484731
  • 如何在 Python 中将 Excel 文件转换为图像?Aspose快速搞定

    在各种情况下 需要将 Excel 电子表格嵌入到 Web 或桌面应用程序中 在这种情况下的解决方案之一是将 Excel 工作表转换为图像格式 在本文中 将学习如何在 Python中将Excel XLSX 或 XLS 转换为 PNG JPEG
  • 算法和数据结构项目练习5-哈希链表

    Hash Chaining Table 项目介绍 代码实现 项目介绍 本项目实现一个简单的哈希表 txt文件包含一个整数值序列 读取它们并使用链接构造一个哈希表 程序应该依次读取每个整数 并使用mod 100作为哈希函数计算其哈希值 因此
  • CSS笔记(黑马程序员pink老师前端)浮动,清除浮动

    浮动可以改变标签的默认排列方式 浮动元素常与标准流的父元素搭配使用 网页布局第一准则 多个块级元素纵向排列找标准流 多个块级元素横向排列找浮动 float属性用于创建浮动框 将其移动到一边 直到左边缘或右边缘触及包含块或另一个浮动框的边缘
  • win10的pycharm开发工具使用Jupyter的各种报错:环境问题

    一 问题 在win10系统的pycharm开发工具使用Jupyter的各种报错 却一直解决不了 我一度使用过购买云服务器 重装系统等等各种办法 都没能解决 例如 在speech processing ipynb文件中 import libr
  • FreeIPA 统一身份认证实现

    1 FreeIPA概述 1 FreeIPA简介 FreeIPA是一个用于Linux Unix环境开源的身份管理系统 提供集中式帐户管理和身份验证 与Windows Active Directory或LDAP的作用类似 FreeIPA集成了3
  • 局部均值分解(matlab实现有注释)

    局部均值分解 local mean decomposition LMD 方法同经验模态分解方法 EMD 一样 也是一种自适应信号处理方法 LMD通过改变信号分解过程能有效改进EMD方法存在的包络拟合不准确 边界处发散等问题 代码如下 cle
  • Linux高阶—CPU性能压测spec(十)

    目录 一 基本概念 二 工作原理 三 测试套件 整数和浮点 测试套件 四 工作模式 speed 测量 rate 测量 五 测试场景 六 操作案例 一 基本概念 SPEC基准广泛用于评估计算机CPU性能工具 SPEC官网下载SPEC CPU
  • 小心宏定义出错

    当宏参数在宏定义中出现超过一次 这个宏作用在复杂的表达式里就可能出错 导致不可预料的结果 我还记得我有一次为这个问题导致的出错 查了一个星期 最后整整debug了一个工作日才找到这个问题 所以提醒大家一定要小心 比如 define MAX