const int num = 16;
struct inputs{
double X1[num];
double X2[num];
};
出现错误:
错误:文件作用域中有可变长度的‘X1’
'X2'也是同样的情况。
但我记得这在C++中是可以的(我可能对C++有所误解)。
有人能为我澄清一下吗?
num
不是真正的常量,它只是只读的。要获得真正的常量,您需要使用#define num 16
。const
变量仍不被视为真正的编译时常量(官方上来说,它不允许作为constant expression
的一部分),因此这是不允许的。但请注意,尽管C语言不要求编译器允许它,标准确实允许实现接受其他形式的常量表达式,所以如果愿意,可以自由接受它。const
变量被视为常量,因此允许这样做。void f(int size) {
int array[size];
}
C语言中允许使用这种方式,但C++不允许。这是一个“可变修改”的数组;你得到的错误信息基本上是在告诉你这些只允许在函数内部使用。
你必须使用一个常量值。因此,在C语言中,你需要使用一个 #define
。在C++中使用这样做是可以的。
请使用下面这个:
#define num 16
struct inputs{
double X1[num];
double X2[num];
};
正如其他人所说,C和C ++在常量整数表达式方面是不同的。
但是,您不必像其他人建议的那样使用宏来编写适用于两者的代码。如果您想要通过“范围”来实现它,可以使用枚举常量来实现。类似于以下内容:
enum { num = 16 };
struct inputs {
double X1[num];
double X2[num];
};
无论您将其放在文件或函数范围内,它都可以正常工作。
不在结构体中。你可以在本地范围内做到这一点。
const
变量(只有其中一些)可以是编译时常量。这就是为什么它在C++中可以工作的原因。