作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
计算数组中元素数量的经典宏是这样的:
#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)
它适用于 gcc
和 clang
。我用它来使 countof()
宏更安全:
#define countof(a) (sizeof(a) / sizeof(*(a)) + assert_array(a))
但是我没有针对这个问题的便携解决方案。
关于c - 有没有办法让 countof() 测试它的参数是否是一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44621553/
我是一名优秀的程序员,十分优秀!