2

我们真的可以在 C99 和 C11 中使用 const 关键字来构建这样的常量表达式吗?什么标准说的?

const int n = 5;

int main()
{
   int arr[n];
}

在 C89 / C90 中我们不能。

4

3 回答 3

5

C 中的No.const从不表示常量,但表示仅就绪。

这与 C90/C99/C11 相同。

请注意,在您的示例中,您使用的是可变长度数组。VLA 已在 C99 中引入,VLA 的大小不需要是常量表达式,但仍然n不是常量表达式。

于 2012-09-09T21:16:10.280 回答
1

不,const不会像在 C++ 中那样创建常量。

另一方面,C99 确实添加了可变长度数组 (VLA),因此对于auto存储类,大小不需要是常量。这使您可以执行以下操作:

int f(int n) { 
    int array[n];
    // ...
}

所以,你不能完全按照你的要求去做,但你可以做一些在许多(也许是大多数)情况下足够接近等效的事情。

于 2012-09-09T21:21:59.537 回答
1

在 C 中,您可能会使用宏来定义常量的值。

以下是我的意思的一个例子。

#define N 5

int main() {
    int array[N];
    // ...
    return 0;
}
于 2018-11-18T04:11:13.493 回答