【发布时间】:2013-05-23 14:13:18
【问题描述】:
有什么方法可以在编译时验证 c 宏中的参数是数组吗?
例如在这两个宏中:
#define CLEAN_ARRAY(arr) \
do { \
bzero(arr, sizeof(arr)); \
} while (0)
和
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
我使用CTC(X) macro 尝试了一些操作,但如果arr 不是数组,我找不到任何验证/警告的方法。
【问题讨论】:
-
我注意到你有
c和c++标签。c++中有一些不错的模板方法。您需要同时适用于两种语言的答案吗? -
如果类型不是“可索引”类型, sizeof((x)[0]) 将给出错误 - 但是,如果它恰好是指针,它会很高兴地接受它。当然,如果有
operator[]类型的x。 -
是的,但它可以是 2 种不同的方法。
-
@0x90:对于 C 和 C++ 有不同答案的问题,您应该提出单独的问题,因为您只能将一个答案标记为已接受,但对于不同的语言可能会有单独的答案。
标签: c++ c gcc compiler-errors