4

当我尝试编译此代码时,出现Case Expression Not Constant错误。我不知道为什么。

while ((*datalen) == 0)
    crReturn(NULL);  //error here
st->len = (st->len << 8) + **data;

函数 crReturn() 定义如下。

#define crReturn(z) \
do {\
    *crLine =__LINE__; return (z); case __LINE__:;\
} while (0)
4

1 回答 1

12

问题是 MSVC++ 在配置为为其“编辑和继续”功能生成调试信息时做了一些非标准的事情(并且与它自己的文档相反),并且这种非标准破坏了__LINE__Simon Tatham 的协程宏中使用的方式。

以下是 PuTTY 源代码中的注释对此的看法:

In particular, if you are getting `case expression not constant'
errors when building with MS Visual Studio, this is because MS's
Edit and Continue debugging feature causes their compiler to
violate ANSI C. To disable Edit and Continue debugging:

- right-click ssh.c in the FileView
- click Settings
- select the C/C++ tab and the General category
- under `Debug info:', select anything _other_ than `Program
Database for Edit and Continue'.

所以你可能应该这样做。(事实上​​,我知道你已经这样做了,因为在我发布这个答案之前我们在评论中讨论了这个问题:-)。)

于 2012-07-12T23:50:56.543 回答