gpt4 book ai didi

c - 有没有办法让 countof() 测试它的参数是否是一个数组?

转载 作者:太空狗 更新时间:2023-10-29 16:45:03 27 4
gpt4 key购买 nike

计算数组中元素数量的经典宏是这样的:

#define countof(a)  (sizeof(a) / sizeof(*(a)))

问题是如果参数是指针而不是数组,它会默默地失败。如果 a 不是数组,是否有一种可移植的方法通过生成编译时错误来确保此宏仅用于实际数组?

编辑:我的问题似乎与这个问题重复:Array-size macro that rejects pointers

最佳答案

使用不可移植的内置函数,这里有一个宏来执行 a 是数组的静态断言:

#define assert_array(a) \
(sizeof(char[1 - 2 * __builtin_types_compatible_p(typeof(a), typeof(&(a)[0]))]) - 1)

它适用于 gccclang。我用它来使 countof() 宏更安全:

#define countof(a)  (sizeof(a) / sizeof(*(a)) + assert_array(a))

但是我没有针对这个问题的便携解决方案。

关于c - 有没有办法让 countof() 测试它的参数是否是一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44621553/

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