在 C 中,通常不允许数组的大小为 0(除非我使用一个或其他编译器端扩展)。
OTOH,有些 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 的情况,此代码是否有效?