《C和指针》——带副作用的宏参数
来源:互联网 发布:淘宝有趣搜索血滴子 编辑:程序博客网 时间:2024/06/03 15:56
先看一段程序
#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次在执行?符号后面的表达式时出现。
0 0
- 《C和指针》——带副作用的宏参数
- [C] 副作用和顺序点——《C Primer Plus》
- C和C++计算的顺序点和副作用
- c --副作用和顺序点
- 宏定义的参数为什么会有副作用
- 关于C语言的副作用和序列点~
- C中表达式语句以及副作用和++,--的有关问题
- Windows Via C/C++:内核模式下的用户同步——成功等待的副作用
- 带指针参数的函数指针数组
- c prime plus的副作用
- 《c和指针》--宏可变参数
- 《C和指针》——声明数组参数
- 宏的一些副作用
- 宏的一些副作用
- 消除宏的副作用
- 宏的一些副作用
- 宏的副作用
- 关于宏的副作用
- 面试12之给定两个链表ListNode* A,ListNode* B,请返回A+B的结果
- The CoderPai Day in AI
- C/C++——从ctime使用到随便测一样冒泡排序和堆排序的效率
- 键盘购买指南
- 汇编笔记4
- 《C和指针》——带副作用的宏参数
- 2017 Google hosts 持续更新
- 值类型和引用类型
- C++——二进制输出一个数以及输出double型位数过多情况
- 常用R语言包介绍
- C/C++——一个因为unsigned引发的大问题
- 模板实现双向链表
- python正则表达式系列(2)——re模块常用函数
- Spring 三级父子容器