为什么在C99数组声明中允许赋值?

时间:2016-04-01 21:41:12

标签: c arrays c99

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中不推荐这样做?

  • 允许这些内容的原意是什么?

  • 到底是什么?

0 个答案:

没有答案