【发布时间】:2010-12-15 07:47:14
【问题描述】:
我在看这个SO question 并开始考虑 const ints 与 #defines 并意识到我实际上并不明白为什么编译器不能处理这个问题。有人可以解释一下为什么下面的代码
const int FOO = 10;
int main(int argc, char** argv)
{
switch(argc)
{
case FOO: { printf("foo\n"); }
default: { printf("default\n"); }
}
}
结果
error: case label does not reduce to an integer constant
我阅读了 ISO-C99 规范,该规范在 6.8.4.2.3 中声明
每个case标签的表达 应该是一个整数常量 表达和没有两种情况 相同的常量表达式 switch 语句应具有相同的 转化后的价值。
我明白为什么 case 表达式必须是常量,但不明白为什么只有文字才能让编译器 (gcc 4.2.1) 满意。
【问题讨论】:
-
有趣的是,代码似乎在 gcc-4.3.4 上编译和运行得很好:ideone.com/n1bmIb 编辑:啊.. 但只能作为 C++,而不是 C。
标签: c objective-c compiler-construction constants