C99和C11中的const关键字和常量表达式

时间:2012-09-09 21:12:28

标签: c

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

const int n = 5;

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

在C89 / C90中,我们不能。

3 个答案:

答案 0 :(得分:5)

没有。 C中的const绝不意味着常量,但它意味着只准备。

C90 / C99 / C11也是如此。

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

答案 1 :(得分:1)

不,const不会像在C ++中一样产生常量。

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

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

所以,你不能完全你要求的东西,但你可以做一些足够接近很多(也许是大多数)情况的东西。

答案 2 :(得分:-1)

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

以下是我的意思的示例。

#define N 5

int main() {
    int array[N];
    // ...
    return 0;
}