c语言宏定义一个MAX函数

2023-05-16

1、

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

测试用例

#include  <stdio.h>
#define MAX(a,b)  (((a)>(b))?(a):(b))
int main()
{
    int a = 7;
	printf("%d\n", MAX(2,3));//3
	printf("%d\n", 5 + MAX(2,3));//8
	printf("%d\n", MAX(2, MAX(3, 4)));//4
	printf("%d\n", MAX(MAX(3, 4),2));//4
	printf("%d\n", MAX(2, 3>4? 3:4));//4
	printf("%d,%d\n", MAX(a++, 6),a);//8,9

	printf("%d\n", MAX(2.0,3.0));//3.0
	printf("%d\n", MAX(2.0,3));//3
    return 0;
}

运行结果:
发现正常无法处理浮点型
在这里插入图片描述
2、利用typeof这个关键字,其也是GUN的扩展语法,可以用它来取得一个数据的类型,这样一来,不管传递给宏的是整型还是浮点型数据,宏都可以自动处理。

#include <stdio.h>
 
#define MAX(a,b)    \
    ({\
            typeof(a) _a = a;\
            typeof(b) _b = b;\
            ((_a)>(_b) ? (_a):(_b));\
    })

3、(void)(&_a == &_b);\
使用一个判断来强迫编译器对比两个变量_a和_b的地址类型(不能直接比较_a和_b的值,因为即使浮点和整型不同但仍是兼容的),由此来触发由于类型不同而产生的警告。前面的强类型转换(void)的目的是要让编译器认为后面的比较语句是有作用的,从而不会误以为没有实际作用而报出其他警告。
————————————————
版权声明:本文为CSDN博主「不懂编程的瘦子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46897212/article/details/121391046

#define MAX(a,b)\
({\
	typeof(a) _a = (a);\
	typeof(b) _b = (b);\
	(void)(&_a == &_b);\
	_a > _b ? _a : -b;\
})

//或
 
#define MAX(a,b)    \
    ({\
            typeof(a) _a = a;\
            typeof(b) _b = b;\
            (void)(&_a == &_b);\
            ((_a)>(_b) ? (_a):(_b));\
    })
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言宏定义一个MAX函数 的相关文章

  • CakePHP 用 MAX 查找

    表格和虚拟数据 CREATE TABLE IF NOT EXISTS messages id int 11 unsigned NOT NULL auto increment user id int 11 unsigned NOT NULL
  • UITextField 最大长度

    当我尝试过如何使用 swift 设置可以输入 UITextField 的最大字符数 https stackoverflow com questions 24641982 how to you set the maximum number o
  • 如何求多个矩阵中对应元素的最大值?

    我有四个具有相同维度的矩阵 比方说 A 1 2 5 4 2 9 B 4 5 9 8 0 1 C 5 3 9 0 4 0 D 5 9 1 0 9 3 如何求四个矩阵中所有对应元素的最大值 在我的示例中 结果应如下所示 maxABCD 5 9
  • 检查整数是否太大

    我正在开发一个交换系统 用户正在设置交换的价格和金额 我想确保交换不大于整数最大值 但我遇到了问题 当兑换金额设置为9或更多时 即使我有检查以确保该数字不大于最大值 但它不起作用 我做了一些调试 当将金额设置为 9 而价格为 2 147 4
  • 求矩阵中不同行和列的元素总和的最大值

    我有一个 nxm 矩阵 我需要找到不同行和列中其值之和的最大值 例如考虑以下矩阵 m1 m2 m3 n1 1 2 3 n2 4 5 6 n3 7 8 9 n4 10 11 12 最大值为 12 8 4 24 请注意 查找最大值并消除属于该列
  • 如何获取数组中同一键的最大值

    如何获取数组中同一键的最大值 E x 我有这个数组 Array id gt 1 amount gt 4 Array id gt 1 amount gt 3 Array id gt 2 amount gt 3 我想要以下结果 意味着我想要相同
  • mysql用触发器设置最大行数

    我想创建一个最多包含 5 行的表 因此 如果我添加新行并且表已经有 5 行 则触发器应删除第一行并添加新行 e g my table id data 1 a 2 b 3 c 4 d 改成 my table id data 2 b 3 c 4
  • 如何在 postgresql 中找到列中的最大值?

    例如 name weight jon 100 jane 120 joe 130 如何只返回权重最大的人的名字 SELECT name FROM tbl ORDER BY weight DESC LIMIT 1 比其他答案性能更高 并且仅产生
  • 限制搜索建议的数量,android

    使用具有自定义搜索建议的搜索界面时 是否有办法限制显示的建议数量 Thanks 其实很简单 首先在你的ContentProvider 定义一个变量来引用 public static final String LIMIT PARAMETER
  • 获取最大值之前的值

    例如 给定这个稀疏 id 表 id 1 2 3 6 7 我可以使用以下查询从表中获取最高的 id SELECT max id FROM Comics I get id 7 如何获取最高 id 之前的 id 即使值不连续 一般来说 您可以首先
  • 使用 Python min() max() 避免数值的字典顺序

    我有一个脚本可以从一组值中提取随机数 然而 今天它崩溃了 因为min and max 按字典顺序对值进行排序 因此 200 被视为大于 10000 我怎样才能避免这里的字典顺序 Len关键是在正确的轨道上 但并不完全正确 我找不到任何其他有
  • 包含聚合的更新语句在 SQL Server 中不起作用

    我希望有人可以在这里帮助我的语法 我有两张桌子ansicache encounters and ansicache x refclaim Table The encounters表有一个encounter匹配的列patacctnumber栏
  • 如何使用 Java 8 流 API 以 O(N) 时间和 O(C) 空间复杂度从列表中仅删除一个最大值(最小值)

    以下代码用于从列表中仅删除一个最大值 在本例中为第一个值 但这无关紧要 这是O n 及时和O n 在空间中 超出输入 public List
  • 如何在 MATLAB 中找到数组中的最大值及其索引?

    假设我有一个数组 a 2 5 4 7 返回最大值及其索引的函数是什么 例如 在我的例子中 该函数应返回 7 作为最大值 4 作为索引 函数是max 要获得第一个最大值 您应该这样做 val idx max a val是最大值并且idx是它的
  • 添加具有现有列名称的新列

    我正在处理一个数据框 如下所示 FID geometry Code w1 w2 0 12776 POLYGON 1 350000000000025 53 61540813717482 12776 0 1 1 13892 POLYGON 6
  • 查找数组中的最小值和最大值

    所以我试图找到用户输入的数组的最小值和最大值 这是我的代码 public static void main String args int a new int args length for int i 0 i lt args length
  • 使用 numpy nan 查找列表的最大值[重复]

    这个问题在这里已经有答案了 import numpy as np print max np nan 1 2 3 4 print max 1 2 3 4 np nan print max 1 2 3 np nan 4 第一个将打印 nan 作
  • 无法向 Kafka 发送大消息

    我想从生产者向 Kafka 发送一条大消息 因此我更改了以下属性 代理 服务器 属性 replica fetch max bytes 317344026 message max bytes 317344026 max message byt
  • 最大值和最小值的算法? (目标-C)

    这是我正在阅读的一本学习 Objective C 的书的一部分 下面定义了一个名为 MAX 的宏 它给出了两个的最大值 价值观 define MAX a b a gt b a b 然后书中有一些练习要求读者定义一个宏 MIN 找到两个值中的
  • hive sql查找最新记录

    该表是 create table test id string name string age string modified string 像这样的数据 id name age modifed 1 a 10 2011 11 11 11 1

随机推荐