Sha*_*ura 2 c c++ arrays multidimensional-array variable-length-array
当我尝试像这样声明一个global二维数组时C++:
int maxX = 10;
int maxZ = 10;
SDL_Rect mapX[maxX][maxZ];
Run Code Online (Sandbox Code Playgroud)
我得到一个错误说 error: variable-size type declared outside of any function
(乍一看,它看起来像是"C和C++问题之间的区别".虽然我可能会弄错.)
由于您使用非常量值作为数组大小,因此您尝试声明可变长度数组(VLA).C++根本不支持VLA,而C仅支持本地 VLA.后者正是编译器在该错误消息中告诉您的内容.(我相信这个错误消息来自C编译器,因为C++编译器会给你一个完全不同的错误.)
因此,严格地说,您无法在C或C++中声明此类数组.虽然C语言支持VLA,但它们仍然必须是本地的.您不能在C中声明具有静态存储持续时间的VLA.
在C++中,所有数组都必须具有固定的预定编译时大小.这意味着数组大小必须由编译时常量指定.您使用非常量值,这是导致错误的原因.
换句话说,在C和C++中,在为具有静态存储持续时间的数组(包括所谓的"全局"数组)指定大小时,需要使用常量表达式.
在C++中,为了使您的大小不变,您必须使用它来声明它们 const
const int maxX = 10;
const int maxZ = 10;
Run Code Online (Sandbox Code Playgroud)
在C中,这将不起作用,因为在C语言中,const对象在某种意义上并不是真正的常量,它们不会形成常量表达式.在C中你必须使用其中之一
#define maxX 10
#define maxZ 10
Run Code Online (Sandbox Code Playgroud)
要么
enum {
maxX = 10,
maxZ = 10
};
Run Code Online (Sandbox Code Playgroud)