Cod*_*lus 10 c const initializer
我使用以下代码.
const int X_ORIGIN = 1233086;
const int Y_ORIGIN = -4728071;
const int Z_ORIGIN = 4085704;
const int xyzOrigin[NUM_DIMENSIONS] = {X_ORIGIN, Y_ORIGIN, Z_ORIGIN};
Run Code Online (Sandbox Code Playgroud)
当我编译它时,GCC给我以下错误.
Transformations.h:16:1:错误:初始化元素不是常量
那是什么意思?我该如何修复我的代码?
Jen*_*ens 20
人们常常误导关键字的命名const,这意味着某些不可改变的常数值.至少在C中,它意味着只读.const文件范围内的限定对象没有适当的const用作数组初始值设定项.
作为非常量constness的一个例子,声明是完全可以的
const volatile unsigned int milliseconds_since_boot;
Run Code Online (Sandbox Code Playgroud)
是一个从编译器控件外部更新的值(想想HW寄存器),并且不允许分配给它,即它是只读的.
Pau*_*l R 14
您不能在C中的全局范围内执行此操作,仅在本地范围内,即在函数内:
#define NUM_DIMENSIONS 3
const int X_ORIGIN = 1233086;
const int Y_ORIGIN = -4728071;
const int Z_ORIGIN = 4085704;
const int xyzOrigin[NUM_DIMENSIONS] = {X_ORIGIN, Y_ORIGIN, Z_ORIGIN}; // FAIL
void foo(void)
{
const int xyzOrigin[NUM_DIMENSIONS] = {X_ORIGIN, Y_ORIGIN, Z_ORIGIN}; // OK
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以将代码编译为C++而不是C.
我不是一个合适的程序员;)但我会这样做:
#define X_ORIGIN (1233086)
#define Y_ORIGIN (-4728071)
#define Z_ORIGIN (4085704)
const int xyzOrigin[NUM_DIMENSIONS] = {X_ORIGIN, Y_ORIGIN, Z_ORIGIN};
Run Code Online (Sandbox Code Playgroud)
这样它只是一个文本替换.如果编译器仍然至少吐出假人,那么你就更接近知道问题所在.