【发布时间】:2019-09-28 11:47:51
【问题描述】:
我们在 Windows 10 Pro (x64) 上使用普通旧的原生 C 语言使用 Visual Studio 2019。昨天我们正在开发一个小程序来测试通信链接,发现下面的代码可以编译并运行,但混淆了 VS2019 调试器:
#include <Windows.h>
#include <stdio.h>
#include <string.h>
struct
{
char *label;
int value;
} one[2] =
{
{ "one", 1 },
{ "two", 2 },
};
struct
{
int prox;
DWORD fuse;
float debug;
} two[6];
int main( int argc, char **argv )
{
DebugBreak();
return 0;
}
当处于断点时(在我们给 Microsoft 的示例中硬编码),调试器将在显示变量值的工具提示中显示两个匿名结构之一的错误成员变量名称和值,并在监视窗口中显示指定的变量。
我的问题是:除了它是一种糟糕的编码习惯之外,还有什么理由说明这段代码是错误的(严格来说,在 C 编译器意义上)?
如果他们试图告诉我这个错误是我的错,我想我有兴趣找到给微软的标准参考(尽管我相信他们的编译器或调试器必须被破坏,因为代码不应该编译/link 或者应该正确调试,对吧?)
【问题讨论】:
-
我什至看不出这是一个“坏习惯”。唯一不好的做法是使用 MSVC 并希望它符合一些 C 标准...
-
这有点模糊。您能否更具体地说明您遇到的错误?
-
但是,我可以在 VS2017 中重现此代码的任何问题。工具提示显示正确的值。观察窗口显示正确的值。一切看起来都很好。你用的是什么版本?
-
@AnT 这是 C,
char*是不好的做法,但没有错。 -
哦,我的错。我错过了 [C] 标签。但是,调试器在 C 版本中也能正确显示所有内容。另外,请注意,如果您将鼠标指针指向
[2]部分中的括号之一,工具提示将显示one[2]表达式的值,这显然是垃圾。如果您将鼠标指向one,它们将正确显示数组中的值。同样的行为也适用于第二个数组。
标签: c visual-studio debugging