所以,我在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条警告。 (十年前编写该代码时,它被认为是完全有效的。)因此,我将错过所有好的建议。结果就是我的代码更糟。
请注意,此警告来自最近添加到Visual Studio的Core Guidelines检查器。仅当您从头开始编写新代码并准备遵循核心准则时,此检查器的警告才有意义。否则,请关闭检查器。
检查器是静态代码分析器的一部分,您可能不应在编译器中包括该分析器。
在项目属性中,/analyze
中有C/C++-->Command Line
。您应该摆脱此标志(我不知道如何针对您的Visual Studio版本执行此标志)。
请勿关闭所有警告。
IMO这取决于情况。例如,编译器发出警告,因为一旦将char []传递给函数,就会丢失sizeof()信息。但是,这甚至可能无关紧要,因为字符串以null终止。但是考虑一下nullptr消失了的情况。那么您将如何在函数中计算它的长度?
为了在这种情况下为编译器提供帮助,我建议明确告诉编译器您知道自己在做什么。这也使意图可见。考虑-
long b = 50;
int a = b;
将生成一个编译器警告,但是根据使用情况,它可能是安全的。但是您要给团队成员一个猜测(是故意还是错误?)。凡
long b = 50;
int a = static_cast<int>(b);
表明它是预期的。