我正在处理一个仅C的大型项目,但我一直被以下问题所困扰:
可以说我有一个功能
void MyFunction(int parameter)
{
printf("parameter: %d\n", parameter);
}
通常被称为
int aVariable = 5;
MyFunction(aVariable);
但是,显然由于C标准规范,这不会导致编译错误:
int aVariable = 5;
MyFunction(&aVariable); // No error signaled, but causes all sorts of mayhem
如何捕获这种错误,特别是在Visual Studio中?我可以启用任何设置使其更严格吗?您可能会建议任何策略(“不要打错”)?
编辑:由于项目的(糟糕)性质,我可能要补充一点,示例代码已经生成了很多警告;我不确定我是否可以在有空的时候将它们全部删除。生成更多警告可能不是最佳选择,但是能够识别这些特定警告(如一个答案所示)可能是解决此特定问题的方法。
如果函数MyFunction
的声明与原型呼叫前点,然后
MyFunction(&aVariable);
是C中真正成熟的约束违反,即我们通常所说的“错误”。这就是语言规范所说的。换句话说,您认为“由于C标准规范”而在某种程度上是允许的,这是不正确的:C标准明确禁止这样做。
任何C编译器都会至少对此类代码发出警告,您也应该注意该警告。如果您的C编译器没有将此违反报告为错误,则通常可以通过编译器设置对其进行更改。
对于Visual Studio编译器,一种方法是观察在这种情况下发出的警告编号,并要求编译器将此类警告转换为错误。这可以通过#pragma warning
或通过项目设置来完成。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句