《C和指针》——带副作用的宏参数
先看一段程序
#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和指针》——带副作用的宏参数相关推荐
- ACMNO.30 C语言-宏交换 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。
题目描述 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参.输出已交换后的两个值. 输入 两个数,空格隔开 输出 交换后的两个数,空格隔开 样例输入 1 2 样例输出 2 ...
- Python中的Optional和带默认值的参数
文章目录 带默认值的参数 Typing.Optional类 Optional[X]等价于Union[X, None] 带默认值的参数 在Python中的类或者函数中,若参数在声明时附带了它的默认值,则 ...
- C语言宏定义(宏参数创建字符串、预处理粘合剂)
#define CNAME value 或者 #define CNAME expression,常见的常量的定义是这样的,但是宏定义可比想象中的要灵活的多.它可以定义宏常量.宏函数,还可以输入数据 ...
- C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)
每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...
- ACMNO.33 C语言-最大值3 分别用函数和带参的宏,从三个数中找出最大的数。
题目描述 分别用函数和带参的宏,从三个数中找出最大的数. 输入 3个实数 输出 最大的数,输出两遍,先用函数,再用宏. 保留3位小数. 样例输入 1 2 3 样例输出 3.000 3.000 来源/分 ...
- ACMNO.31 C语言-宏求余 输入两个整数,求他们相除的余数。用带参的宏来实现,编程序。
题目描述 输入两个整数,求他们相除的余数.用带参的宏来实现,编程序. 输入 a b两个数 输出 a/b的余数 样例输入 3 2 样例输出 1 来源/分类 C语言 题目截图: 思路: 这个是求余数,应该 ...
- 对C语言 结构指针变量做函数的参数 结构作为函数的参数
一.结构指针变量做函数的参数 /* 用指针变量作函数参数进行传送,这时由实参传向形参的只是地址,从而减少了时间和空间的开销. */ /* 计算一组学生的平均成绩和不及格的人数,用结构指针变量作函数参数 ...
- 【C 语言】数组 ( 指针数组用法 | 命令行参数处理 )
文章目录 一.指针数组用法 ( 命令行参数处理 ) 二.完整代码示例 一.指针数组用法 ( 命令行参数处理 ) main 函数是 操作系统 与 应用程序 交互的入口 , main 函数的 char* ...
- ytu 1057: 输入两个整数,求他们相除的余数(带参的宏 + 模板函数 练习)
1057: 输入两个整数,求他们相除的余数 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 177 Solved: 136 [Submit][Stat ...
最新文章
- KVell 单机k/v引擎:用最少的CPU 来调度Nvme的极致性能
- 解决文字无法缩小的问题
- 完美解决ie8以下不兼容h5的方法
- Python stylecloud制作酷炫的词云图
- 深入解析阿里 PouchContainer 如何实现容器原地升级
- hcl启动设备失败_施耐德ATS48M10Q软启动器启动时报故障维修技术精湛
- Poj 3246 Balanced Lineup(线段树基础)
- SAP License:全球十大主流ERP厂商,看看你是不是在用
- java 线程池与executor_详解Java线程池和Executor原理的分析
- 如何获取小程序页面路径
- UE4 打包ios包失败问题
- QuartusII 15.0 中解决仿真报错 Error : vism-19 Faild to access library问题
- 一文读懂|什么是dToF激光雷达技术?
- 上海计算机学院网上报名,上海市学历积分报名网,成年人考试网上报名
- C++开发者的机会在哪里?盘点C/C++就业方向
- Oracle 中一些主要的V$视图种类
- 怎样搭建游戏服务器,传奇复古版手游是怎样搭建的,用云服务器架设游戏技术详细教程
- X-Forwarded-For
- Acwing4728. 乘方(模拟)
- Spring 常用注解 脑图版
热门文章
- python epub.js_如何利用Python打包HTML页面为epub?
- linux那些事之LRU(3)
- Mybatis(6)CURD增删改查操作
- vue路由+ elementUI表格组件:loop文章列表页enter内容页(vue路由传参userid)- 代码篇
- WordPress苏醒Grace v8.2博客主题模板去sq版
- 918国际导航网V4.2版整站源码
- 石青建站养站大师 v1.8.6.1
- mysql计划任务书_求做一个基于java的mysql课程设计任务书 要求如下
- 计算机并行处理专业,分布式计算机并行处理技术(论文).doc
- csds原装的Markdown文档