规则:函数内对入参指针指向的地址没有修改的话,入参类型设为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指针。

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

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

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