我来自javascript/php/python,可能我错过了什么,这里是代码:
const int a = 50;
const int c = 100;
const int d = 100;
int endX = c + a;
int endY = d;
int startX, startY, b;
Run Code Online (Sandbox Code Playgroud)
我明白了
ex1.4.c:6:错误:初始化元素不是常量
ex1.4.c:7:错误:初始化元素不是常量
有人有解释吗?
Mak*_*zin 17
不幸的是,在C const
变量中并不是真正的常量.
以下是c99标准的摘录.
6.7.8初始化
- 具有静态存储持续时间的对象的初始化程序中的所有表达式应为常量表达式或字符串文字.
常量定义如下:
6.4.4常数
句法
不变:
Run Code Online (Sandbox Code Playgroud)integer-constant (e.g. 4, 42L) floating-constant (e.g. 0.345, .7) enumeration-constant (stuff in enums) character-constant (e.g. 'c', '\0')
标准定义了常量表达式,如下所示:
6.6常量表达式
(7)初始化器中的常量表达式允许更大的纬度.这样的常量表达式应为或评估为以下之一:
- 算术常量表达式,
- 空指针常量,
- 地址常量,或
- 对象类型的地址常量加上或减去整数常量表达式.
(8)算术常量表达式应具有算术类型,并且 只能具有整数常量,浮点常数,枚举常量,字符常量和sizeof表达式的操作数.算术常量表达式中的转换运算符只能将算术类型转换为算术类型,除非作为sizeof运算符的操作数的一部分,其结果为整数常量.
因此,c
而a
不是常量表达式,不能作为你的情况初始化.
如果您将 endX 声明为全局变量,则该错误是有道理的。
原因是全局变量是在编译时初始化的,而你试图将endX初始化为一个必须在执行时完成的操作。
const
表达式必须是C中的编译时常量,与C++不同,因此c+a
不能用作常量.在C中处理此问题的常用方法是使用预处理器:
#define A 50
#define C 100
#define D 100
int endX = C + A;
int endY = D;
int startX, startY, b;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
64235 次 |
最近记录: |