此程序产生以下错误:
案例标签不会减少为整数常量|
我根本无法理解为什么显式声明的常量third_cond
,指定的初始值设定项3
,在函数体内部,也不被视为case 3
的常量而{{1}标识符#define
同时被视为常量。如果我使用文字second_value
代替3
或仅third_cond
{{1作为#define
。请解释为什么会这样,除非这个问题是重复的。我查了一下,但没有找到答案。
third_cond
答案 0 :(得分:9)
在C const
中并不代表常数而是只读。 const
限定变量永远不是常量,不能在需要常量表达式的地方使用。
请注意,您还可以将enum
常量用于case
常量表达式,因为enum
常量是实常数。
答案 1 :(得分:1)
常量实际上是一个值:"string constant"
,1L
,0.5
,0xAF
,...
您可以使用enum
:
enum
{
MY_CONSTANT_1,
MY_CONSTANT_2,
/* ... */
}
switch-case
等待可以转换为int
的常量(enum
,int
,long
,...)。
#define
声明一个宏,因此在编译时,second_cond
会被2
取代,这是一个常量。
但是third_cond
仍然是一个变量,一个只读变量(因为const
),所以,不能保证它的值保持不变(即使存在{{1}它只将标识符标记为只读,而不是关联的内存。