包含名为"by"的术语的Visual Studio表达式无法在监视窗口中进行评估

And*_*ana 5 c++ watch visual-studio-debugging

考虑下面的C++代码:

int _tmain(int argc, _TCHAR* argv[])
{
    int by = 10;
    printf("%d\n", by);

    int bx = 20;
    printf("%d\n", (by + bx));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.有趣的是"by"变量.如果我尝试为包含by的简单表达式添加监视,则结果将为CXX0030:错误:无法计算表达式.

例如,在断点上return 0,如果我添加以下手表,我会得到提到的结果:

by : 10
bx : 20
by + 5 : CXX0030: Error: expression cannot be evaluated
bx + 5 : 25
by + bx : CXX0030: Error: expression cannot be evaluated
(by) + bx : 30
by + (bx) : CXX0030: Error: expression cannot be evaluated
bx + (by) : CXX0014: Error: missing operrand
Run Code Online (Sandbox Code Playgroud)

这种情况发生在多台计算机上的VS2010,VS2008上.

所以,更多出于好奇,"by"发生了什么?这是一种奇怪的操作员吗?为什么bx不能得到同样的待遇?

(我已经尝试了google,但很难用"by"这样的术语获得一些相关的点击率)

Ton*_*nyK 8

对此感兴趣,我做了一些挖掘.从这个链接,我们看到调试器中的本机C/C++表达式求值程序处理汇编语言表达式; 在汇编语言链接之后,我们发现BY在汇编语言表达式中是BYTE的缩写.所以只是另一个微软的蠢货


Jar*_*Par 7

您在这里看到的是C++ Expression Evaluator的BY运算符实现.您对表达式的使用BY被解释为运算符而不是局部变量.

参考:http://msdn.microsoft.com/en-us/library/56638b75.aspx

很多讨论都是关于这种行为是一个错误还是一个设计.不幸的是,只有实施该功能的人才能真正回答.由于对这种情况不满意,可能有充分的理由说明为什么要明确这样做(想到消除歧义的代价).或者这可能只是对实施者的疏忽.只有他们才知道答案.

如果这确实感觉像是一个错误,那么请在连接上提交错误.这是听取您的意见的最佳方式,很可能团队从未收到任何有关此行为的反馈(在我的搜索中找不到任何反馈).