C-捕获错误的参数错误

亚历杭德罗

我正在处理一个仅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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章