C++之宏定义实现两个数最值
转自:https://blog.csdn.net/baidu_33725271/article/details/69478782
方法一: 利用三重条件运算符
#include <stdio.h>
#define MIN(A,B) ( (A) > (B) ? (B) : (A) )
#define MAX(A,B) ( (A) > (B) ? (A) : (B) )
int main(void)
{
printf("%d\n",MIN(,));
printf("%d\n",MAX(,)); return ;
}
值得关注的是:
1 . 宏定义的变量在引用的时候,用 ()括起来,防止预处理器展开的错误。
2 . (a > b ? action1 : action2 ) 这样的方式和 if —else 结果一样,但他会使得编译器产生更优化的代码,这在嵌入式编程中比较重要。
方法二: typeof 关键字
#include <stdio.h>
#define MIX(X,Y) ({\
typeof(X) x_ = (X);\
typeof(Y) y_ = (Y);\
(x_< y_)? x_:y_;\
})
#define MAX(X,Y) ({\
typeof(X) x_ = (X);\
typeof(Y) y_ = (Y);\
(x_>y_)? x_:y_;\
})
int main(int argc, char const *argv[])
{
int num1,num2;
printf("input two numbers:");
scanf("%d %d",&num1,&num2);
printf("mix is %d,max is %d\n",MIX(num1,num2),MAX(num1,num2));
return ;
}
值得借鉴的是:
1 . typeof 关键字 用于获得变量的数据类型 。
2 . 宏定义的实现,用 { } 作为宏整体,里面是一个代码块,语句用 ; 隔开 。
3 . 当宏的实现长度很长的时候,使用换行符 \ 换到下一行 。
4 . 使用输入数据的类型定义局部变量 x_ 和 y_ 实现对原始数据的保护。
5 . 宏实现,不能用 ; 结尾
其他参考:https://zhidao.baidu.com/question/1703790750415801020.html
C++之宏定义实现两个数最值的更多相关文章
- 请定义一个宏,比较两个数的a、b的大小,不能使用大于、小于、if语句
请定义一个宏,比较两个数的a.b的大小,不能使用大于.小于.if语句 方法一: #define max(a,b) ((((long)((a)-(b)))&0x80000000)?(b): ...
- C语言宏定义取得两数的最大值和最小值
/*本程序时为了验证用宏来做 * 两个数的大小比较的写法*/#include<stdio.h>#define MAX(x,y) ((x)<(y)?(y):(x))#define MI ...
- c语言实现交换两个数的值
C语言中要实现交换两个数的值,可以有很多种方法,具体如下所述. 不使用中间变量: // 异或, a^=b^=a^=b; a ^= b; b ^= a; a ^= b; // 加减 a = a + b; ...
- C语言交换两个数的值
#include<stdio.h> int main() { //交换两个数的值 // 方法一 可读性最好 ; ; int temp ; temp = a; a = b; b = temp ...
- java中不创建使用第三方变量,交换两个数的值
1.直接使用算术运算法交换 先把两个数的和赋值给其中一个,然后做减法.例如num1=num1+num2; 此时num2(交换之后)就等于num1减去num2:废话不多说,直接上代码 public cl ...
- 请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句
提供一种算法: #define max(a, b) ((((a)-(b)) + fabs(a-b))?(a):(b))
- C/C++宏定义交换两个值
#define SWAP(t,a,b) \ do{ \ t c = a; \ a = b; \ b = c; \ }); void main() { ,b=; SWAP(int,a,b); }
- php不用第三个变量,交换两个数的值
//字符串版本 结合使用substr,strlen两个方法实现 $a="a"; $b="b"; echo '交换前 $a:'.$a.',$b:'.$b.'< ...
- c语言函数实现交换两个数的值
代码: #include <stdio.h> void swap(int x,int y) { int temp; temp = x; x = y; y = temp; printf(&q ...
随机推荐
- mock 数据 解决方案
前端工程化之--Mock解决方案 https://www.jianshu.com/p/720b12b5d120 一.为什么要使用mock数据: 1.后端接口数据没有的时候,前端根据接口文档,使用 ...
- js对div取值与赋值
js对div取值与赋值 因为JavaScript运行时,id="test1" 的那个div元素可能还没解析和加载,js加载是有顺序的.只需把 js 整个搬到 后面即可. 还有一个特 ...
- Linux中的特殊权限s、t、i、a
文件权限除了r.w.x外还有s.t.i.a权限:s:文件属主和组设置SUID和GUID,文件在被设置了s权限后将以root身份执行.在设置s权限时文件属主.属组必须先设置相应的x权限,否则s权限并不能 ...
- webstorm 分屏
- AVL树,C语言实现,完整代码,先贴上,讲解稍后
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #de ...
- pandas 使用出现的问题汇总
问题1:<bound method NDFrame.head of 刚开始还以为是自己的数据集有问题,怎么显示不对呢! 解决: 仔细观察,是自己给的输出有问题,data.head什么鬼??? 正 ...
- C# winform 将其他程序嵌入Form窗体
嵌入类 public class ExeImpaction { public void FrmClosing() { try { if (!process.HasExited) process.Kil ...
- elasticsearch-6.0.1安装
elasticsearch-6.0.1安装 0. 介绍: ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎:是目前全文搜索引擎的首选. ...
- Python 字符串常用判断函数
判断字符串常用函数: S代表某字符串 S.isalnum() 所有字符都是数字或字母,为真返回Ture,否则返回False S.isalha() 所有字符都是字母,为真返回Ture,否则返回 ...
- Android ADB被占用 重启 ADB方法
前言 ADB 是 android sdk里面的一个工具,这个工具可以用于操作管理 Android 模拟器 和 真实Andriod手机设备.列如 : 执行安装 删除 应用的操作 , 执行 模拟点击屏幕 ...