新的c ++警告会提高可靠性吗?

问题描述 投票:0回答:2

所以,我在C#中工作了很长时间之后一直在C ++中工作,我注意到现在有所有这些警告。

虽然一些警告似乎是使代码更可靠的好建议,但似乎许多警告都没有。其中一些似乎完全错误。

这是一个对我来说似乎不值得的示例:

static TCHAR szGeneral[] = _T("General");
static TCHAR szSqlOdbcDriver[] = _T("SqlOdbcDriver");

WriteProfileString(szGeneral, szSqlOdbcDriver, CSqlServerDatabase::m_sOdbcDriver.GetString());

警告C26485表达式'szGeneral':没有指向指针衰减的数组(bounds.3)。

警告C26485表达式'szSqlOdbcDriver':没有指向指针衰减的数组(bounds.3)。

我的问题是:这会使我的代码更好吗?

我认为必须关闭警告,因为我的项目中有将近800条警告。 (十年前编写该代码时,它被认为是完全有效的。)因此,我将错过所有好的建议。结果就是我的代码更糟。

c++ visual-studio warnings compiler-warnings
2个回答
2
投票

请注意,此警告来自最近添加到Visual Studio的Core Guidelines检查器。仅当您从头开始编写新代码并准备遵循核心准则时,此检查器的警告才有意义。否则,请关闭检查器。

检查器是静态代码分析器的一部分,您可能不应在编译器中包括该分析器。

在项目属性中,/analyze中有C/C++-->Command Line。您应该摆脱此标志(我不知道如何针对您的Visual Studio版本执行此标志)。

请勿关闭所有警告。


1
投票

IMO这取决于情况。例如,编译器发出警告,因为一旦将char []传递给函数,就会丢失sizeof()信息。但是,这甚至可能无关紧要,因为字符串以null终止。但是考虑一下nullptr消失了的情况。那么您将如何在函数中计算它的长度?

为了在这种情况下为编译器提供帮助,我建议明确告诉编译器您知道自己在做什么。这也使意图可见。考虑-

long b = 50;
int a = b;

将生成一个编译器警告,但是根据使用情况,它可能是安全的。但是您要给团队成员一个猜测(是故意还是错误?)。凡

long b = 50;
int a = static_cast<int>(b);

表明它是预期的。

© www.soinside.com 2019 - 2024. All rights reserved.