今天写程序时碰到这个问题:
包含了第三方库的头文件,头文件内有如下声明:extern const int ZOO_CREATED_EVENT;
变量在.c文件内定义,已被编译到第三方库中。
然后我在switch逻辑中用了上面的常量:
switch (type) {
case ZOO_CREATED_EVENT:
...
break;
}
编译报错如下,‘ZOO_CREATED_EVENT’ cannot appear in a constant-expression
比较诧异!
经过查阅了解到,编译器构造switch查找表时需要明确其常量值,而extern常量在编译时尚不能明确,所以会报错。
暂时使用"if ... else if ..."解决问题。
From http://www.cnblogs.com/caosiyang/