在C语言中,通常不允许数组大小为0(除非使用某些编译器端的扩展)。
但是,有些可变长数组(VLA)的长度可能为0。
它们是否被允许呢?
我指的是以下代码:
void send_stuff()
{
char data[4 * !!flag1 + 2 * !!flag2];
uint8_t cursor = 0;
if (flag1) {
// fill 4 bytes of data into &data[cursor]
cursor += 4;
}
if (flag2) {
// fill 2 bytes of data into &data[cursor]
cursor += 2;
}
}
结果是一个
data
数组,长度为0、2、4或6,这取决于标志的组合。现在的问题是:如果数组长度为0,这段代码是否有效?
char data[1 + 4 * !!flag1 + 2 * !!flag2];
。当然,这在后续调用sizeof data
时会有问题。 - chux - Reinstate Monica