以下函数是否严格符合C99标准?
GCC和Clang都会发出关于使用零大小数组的警告,但我认为这个警告是没有道理的。据我所知,6.7.6.3p7中提到
此外,在以下情况下可以调用这样的函数吗:
void foo(int a[static 0]) {
(void)a;
}
GCC和Clang都会发出关于使用零大小数组的警告,但我认为这个警告是没有道理的。据我所知,6.7.6.3p7中提到
static
关键字表示指针a
应该指向至少零个元素,这个要求对于任何具有确定值的指针来说都是显而易见的。此外,在以下情况下可以调用这样的函数吗:
int i;
foo(NULL);
foo(&i);
foo(&i + 1);
1
。 - Jonathan Lefflerfoo(&i + 1)
在static 0
的情况下是有效的,但与static 1
的foo
声明不匹配。 - chqrlieint arr[][]
不是一个有效的函数参数的原因相同。虽然我不记得具体是哪一章“否定”了数组衰减的规则。 - Lundin