我经常写这个:
for (size_t i = 0; i < sizeof(some_variable) / sizeof(some_variable[0]); i++) {
// ...
}
根据这个问题,我也可以编写一个类似的宏:
#define ArrayLength(x) (sizeof(x)/sizeof(x[0]))
然而,我认为将这个非常简单的东西混淆在宏下面并不是一个好的解决方案。
是否有C99或C11定义的更好的替代方案?
由于这种样板语法,我经常发现我的同事硬编码变量的大小,或者更糟糕的是使用像这样的define
:
#define ELEMENTS 23
int foo[ELEMENTS];
for (size_t i; i < ELEMENTS; i++);
stddef
中,例如可以找到非常有用的offsetof
。它是一种标准化的方式来获取结构体中的成员偏移量。我正在寻找类似于此的内容,可能称为elementsof
。 - nowoxELEMENTS
属于foo
。如果你只是为了foo
使用ELEMENTS
并遍历它,那么最好使用sizeof(foo) / sizeof(foo[0])
。此外,你让代码更难读懂,因为不能直接读取foo
的大小,必须查找可能在上面某个地方找到的ELEMENTS
。 - nowoxfor (size_t i; i < ELEMENTS; i++);
不是“无用的”。最佳编码实践通常取决于更大的代码上下文和团队采用的样式指南。 - chux - Reinstate Monica