先看一段程序

#include <stdio.h>
#define MAX(a,b) {(a)>(b)?(a):(b)}
int main(){int x = 5;int y = 8;int z = MAX(x++, y++);printf("x=%d, y=%d, z=%d\n", x, y, z);return 0;
}

这个打印的是什么?
结果是:x=6,y=10,z=9。
其实x和z的结果没什么奇怪的,主要是y的结果
和往常一样,只要检查二下用宏替换后产生的代码,这个奇怪的结果就变得一日了然了。

z = ( ( x++ ) > ( y++ ) ? ( x++ ) : ( y++ ) );

虽然那个较小的值只增值了一次,但那个较大的值却增值了两次一一第1 次是在比较时,第2次在执行?符号后面的表达式时出现。

《C和指针》——带副作用的宏参数相关推荐

  1. ACMNO.30 C语言-宏交换 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。

    题目描述 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参.输出已交换后的两个值. 输入 两个数,空格隔开 输出 交换后的两个数,空格隔开 样例输入 1 2 样例输出 2 ...

  2. Python中的Optional和带默认值的参数

    文章目录 带默认值的参数 Typing.Optional类 Optional[X]等价于Union[X, None] 带默认值的参数 在Python中的类或者函数中,若参数在声明时附带了它的默认值,则 ...

  3. C语言宏定义(宏参数创建字符串、预处理粘合剂)

    #define CNAME value   或者 #define CNAME expression,常见的常量的定义是这样的,但是宏定义可比想象中的要灵活的多.它可以定义宏常量.宏函数,还可以输入数据 ...

  4. C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)

    每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...

  5. ACMNO.33 C语言-最大值3 分别用函数和带参的宏,从三个数中找出最大的数。

    题目描述 分别用函数和带参的宏,从三个数中找出最大的数. 输入 3个实数 输出 最大的数,输出两遍,先用函数,再用宏. 保留3位小数. 样例输入 1 2 3 样例输出 3.000 3.000 来源/分 ...

  6. ACMNO.31 C语言-宏求余 输入两个整数,求他们相除的余数。用带参的宏来实现,编程序。

    题目描述 输入两个整数,求他们相除的余数.用带参的宏来实现,编程序. 输入 a b两个数 输出 a/b的余数 样例输入 3 2 样例输出 1 来源/分类 C语言 题目截图: 思路: 这个是求余数,应该 ...

  7. 对C语言 结构指针变量做函数的参数 结构作为函数的参数

    一.结构指针变量做函数的参数 /* 用指针变量作函数参数进行传送,这时由实参传向形参的只是地址,从而减少了时间和空间的开销. */ /* 计算一组学生的平均成绩和不及格的人数,用结构指针变量作函数参数 ...

  8. 【C 语言】数组 ( 指针数组用法 | 命令行参数处理 )

    文章目录 一.指针数组用法 ( 命令行参数处理 ) 二.完整代码示例 一.指针数组用法 ( 命令行参数处理 ) main 函数是 操作系统 与 应用程序 交互的入口 , main 函数的 char* ...

  9. ytu 1057: 输入两个整数,求他们相除的余数(带参的宏 + 模板函数 练习)

    1057: 输入两个整数,求他们相除的余数 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 177  Solved: 136 [Submit][Stat ...

最新文章

  1. KVell 单机k/v引擎:用最少的CPU 来调度Nvme的极致性能
  2. 解决文字无法缩小的问题
  3. 完美解决ie8以下不兼容h5的方法
  4. Python stylecloud制作酷炫的词云图
  5. 深入解析阿里 PouchContainer 如何实现容器原地升级
  6. hcl启动设备失败_施耐德ATS48M10Q软启动器启动时报故障维修技术精湛
  7. Poj 3246 Balanced Lineup(线段树基础)
  8. SAP License:全球十大主流ERP厂商,看看你是不是在用
  9. java 线程池与executor_详解Java线程池和Executor原理的分析
  10. 如何获取小程序页面路径
  11. UE4 打包ios包失败问题
  12. QuartusII 15.0 中解决仿真报错 Error : vism-19 Faild to access library问题
  13. 一文读懂|什么是dToF激光雷达技术?
  14. 上海计算机学院网上报名,上海市学历积分报名网,成年人考试网上报名
  15. C++开发者的机会在哪里?盘点C/C++就业方向
  16. Oracle 中一些主要的V$视图种类
  17. 怎样搭建游戏服务器,传奇复古版手游是怎样搭建的,用云服务器架设游戏技术详细教程
  18. X-Forwarded-For
  19. Acwing4728. 乘方(模拟)
  20. Spring 常用注解 脑图版

热门文章

  1. python epub.js_如何利用Python打包HTML页面为epub?
  2. linux那些事之LRU(3)
  3. Mybatis(6)CURD增删改查操作
  4. vue路由+ elementUI表格组件:loop文章列表页enter内容页(vue路由传参userid)- 代码篇
  5. WordPress苏醒Grace v8.2博客主题模板去sq版
  6. 918国际导航网V4.2版整站源码
  7. 石青建站养站大师 v1.8.6.1
  8. mysql计划任务书_求做一个基于java的mysql课程设计任务书 要求如下
  9. 计算机并行处理专业,分布式计算机并行处理技术(论文).doc
  10. csds原装的Markdown文档