范围不变和字符数组

问题描述:

可能重复:
Declaring an array with a non-constant size variable范围不变和字符数组

这是我的代码:

const int xsize=150; 
char Hey[xsize]; 

我不明白为什么我不能宣布我的新数组使用上面的常量。 任何人都可以帮忙吗?

这不是有效的C89代码。即使变量恰好为const,也不能声明具有可变大小的数组。

如果你将它作为#define而不是const int,它会起作用。不过,它在C99中有效。 GCC和其他编译器也提供它作为C89模式的扩展。

+0

@Kos谢谢,纠正。 –

+0

GCC允许在C++中使用'-std = gnu ++ 98'(缺省为或仍然是?)或者使用-std = gnu ++ 11'作为语言扩展。 – Kos

+0

注意:它只是在块范围内有效的C99,在文件范围内,您仍然需要一个_constant表达式_作为大小。 –

因为const不会创建常量。它创建一个只读对象。

对象和常量的区别在于对象有一个特定的内存位置,常量只能在源代码中生存。

在C89中,数组大小应该是一个常量表达式。 A const变量不是一个常量表达式。要做到这一点,你必须使用C99中的VLA。