【发布时间】:2014-07-18 10:29:15
【问题描述】:
我想在 switch/case 语句中使用 (const) 结构成员作为选择器。问题是我得到一个“case expression not constant”或“illegal constant expression”。这是一个简单的例子
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct _myStruct
{
unsigned int value_;
unsigned int index_;
} myStruct;
#define VALUE_0 0
const unsigned int VALUE_1 = 1;
const myStruct VALUE_2 = {2, 0};
int main()
{
srand((unsigned int)time(0));
switch(rand()%4)
{
case VALUE_0:
printf("Value is 0\n");
break;
case VALUE_1:
printf("Value is 1\n");
break;
case VALUE_2.value_:
printf("Value is 2\n");
break;
case 3:
printf("Value is 3\n");
break;
}
return 0;
}
case VALUE_2.value_ 选项会生成编译器错误。顺便说一句,VALUE_2 确实是一个常数。
我正在使用 ANSI C。无论如何,C++ 给出了同样的错误。
有什么提示吗?
【问题讨论】:
-
您的案例标签不会减少到
integer constant -
如果将
const myStruct VALUE_2更改为constexpr myStruct VALUE_2(在 C++11 中)以具有编译时间常数,它会编译。const并不意味着它在编译时是已知的。 -
可能重复:stackoverflow.com/questions/14069737/… 在
switch语句中用作标签的两个问题中都有const int。 -
因为它不是一个常数。关键字
const使变量“不可写”,但不是常量。 -
@Jarod42 虽然这不是 C++11
标签: c struct switch-statement