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

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

const int n = 5; int main() { int arr[n]; } 

在C89 / C90我们不能。

C中的常数 const永远不会意味着恒定,但它意味着只准备就绪。

C90 / C99 / C11也是如此。

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

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

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

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

所以,你不能完全按照你的要求去做,但是你可以做一些与许多 (也许是大多数)情况相当接近的事情。