静态告警——函数入参加const

规则:函数内对入参指针指向的地址没有修改的话,入参类型设为const

注意点:

1,有宏的地方,要点进去看内容

2,如果涉及到指针传递,要沿着调用链查看是否有修改指针指向的内容,

如果有修改就不能设为const,如果没有修改,则沿着调用链依次加const

void f1(int *p)
{
    f2(p);
}
void f2(int *p)
{
    p=0;
}

像这种情况,f1加了const之后, f2也要加

貌似并不是很复杂?在我想了这些之后我就开干了,然而,很快,我就遇到了各种各样的情况。

首先是extern

注意点3:函数入参加了const,所有extern的地方都要改。

如果f3也调用了f2,会是什么情况?

f2加了const,f3中的调用点给的实参是非const的,这样是可以的。

但是,如果调用点是函数指针,那就扯犊子了.

void f1(int *p)
{
    f2(p);
}
void f2(int *p)
{
    p=0;
}
typedef void(*funp)(int *p);
void f3(funp p)
{
    //do something
}
void f4()
{
    f3(f2);
}

形如这样的代码,如果该f1就要改f2,改了f2就要改f3,改了f3就要改所有调用f3(传递这个指针)的地方,因为函数指针不能自动转换,不像非const指针可以自动转换为const指针。

另外一种情况是,函数指针被放到一个函数指针的数组中,这样就更难单独修改这个函数了。

如果把函数指针,强制转化为另外一种函数指针,或许可行,但是我认为更不符合编码规范。

这种情况是否只能选择忽略?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值