gpt4 book ai didi

为任何类型的数组创建 min() 宏

转载 作者:行者123 更新时间:2023-11-30 19:21:01 24 4
gpt4 key购买 nike

我想创建一个 C 宏,返回输入中任何类型的静态数组的标量最小值。例如:

float A[100];
int B[10][10];
// [...]
float minA = MACRO_MIN(A);
int minB = MACRO_MIN(B);

我该怎么做?

最佳答案

可能可以使用 GCC 扩展来完成,但不能使用标准 C。其他编译器也可能有合适的扩展。这当然会使代码非常难以移植。我建议不要这样做,因为它很难实现,它会是“意外的”,并且可能会成为困惑的根源(或者更糟糕的是,错误)。

您必须声明一个临时变量来保存“到目前为止”在数组上迭代时看到的最大/最小值,并且如果没有扩展,该变量的类型很难制定。

返回临时值也很困难,但可以通过 GCC 扩展实现。

为了使上述内容更加具体,这是我的想象的草图。我没有测试编译这个,所以它很可能有错误:

#define ARRAY_MAX(a)  ({ typeof(a) tmp = a[0];\
for(size_t i = 1; i < sizeof a / sizeof tmp; ++i)\
{\
if(a[i] > tmp)\
tmp = a[i];\
}\
tmp;\
})

以上用途:

  • ({})GCC Statement Expressions扩展,允许宏有一个用作“返回值”的局部变量。
  • typeof用于计算正确的类型。
  • 请注意假设数组大小不为零。这不应该是一个非常具有限制性的假设。

sizeof 的使用当然是标准的。

当我写上面的内容时,我意识到多维数组可能存在问题,而我在尝试之前才意识到这些问题。不过,我不会进一步完善它。请注意,它以“可能”开头。

关于为任何类型的数组创建 min() 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20607060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com