C99中似乎允许奇怪的方式来声明数组大小。
D[ type-qualifier-listopt assignment-expressionopt ]
D[ static type-qualifier-listopt assignment-expression ]
D[type-qualifier-list static assignment-expression]
D[type-qualifier-listopt *]
示例程序:
#include <stdio.h>
int x = 0;
int func0(int array[x = 3])
{
return 1;
}
int func1(int array[(4, x = 3)])
{
int other_array[x = 4];
return 1;
}
int func2(int array[printf("this is weird: %d\n", x) && func1(NULL)])
{
return 1;
}
int main()
{
int array[128];
func2(array); // <-- prints "this is weird: 0\n"
func2(array); // <-- prints "this is weird: 4\n"
}
BTW这是无效的C89,而不是有效的C ++
我有很多问题。
这些构造是否在任何地方使用?
如果没有,为什么实施者会费心去实施这些,为什么在C11中不推荐这样做?
允许这些内容的原意是什么?
到底是什么?