【发布时间】:2012-07-12 22:56:37
【问题描述】:
当我尝试编译此代码时,我收到 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)
【问题讨论】:
-
这段代码是否在
switch语句中?如果不是,也许 MSVC++(令人困惑)在看到不在switch内的case时会给出 C2051 错误;我手头没有 MSVC++9 的副本,但您可以通过在代码中的某处粘贴随机的case 0:并查看从中得到什么错误来测试它。 (crReturn的实际用途是什么?) -
哦。你在使用 Simon Tatham 的协程东西,不是吗?在那种情况下,我不禁认为你应该得到所有的痛苦:-)。您是否可能没有在函数的开头添加
crBegin;并在末尾添加crEnd;? -
我注意到 Simon Tatham 的页面中关于他的协程宏的以下内容。 “请注意,Visual C++ 版本 6 不喜欢这种协程技巧,因为它的默认调试状态(用于编辑和继续的程序数据库)对 LINE 宏有一些奇怪的作用。”我不预计此问题会出现在更高版本的 MSVC++ 中,但您可以尝试关闭“编辑并继续”,看看是否有帮助。
-
@GarethMcCaughan 另外,这不是我的代码。这是 putty 的 svn 存储库的源代码。我正在尝试从 Visual Studio 9.0 构建 obj 文件并收到上述错误。我试图找出原因并克服它。
-
该死的。我突然想到“禁用编辑并继续”可能是模棱两可的,所以让我明确一下我认为需要做什么:重要的是“调试信息格式”(在“C/C++ -> General”属性上页),它需要设置为“用于编辑和继续的程序数据库”以外的其他内容。如果这样做并重建没有帮助,那么我认为我没有想法;您可能想联系 Simon Tatham...
标签: visual-studio compiler-errors