请参阅以下程序。
#include <stdio.h>
void f(int a);
int main()
{
f(10);
return 0;
}
void f(const int a)
{
/* a = 20; */ /* Want to avoid accidental modification of a. */
printf("%d\n", a);
}
在这个程序中,函数f()
的声明与定义不完全匹配。该声明以int a
为参数,但定义以const int a
为参数。
以下是关于此计划的问题。
f()
的代码不必知道实际参数a
是否在f()
中被视为常量。这一点细节是f()
私有的。这不是调用代码的关注点。就调用者而言,在任何一种情况下,在调用int a
时,对于它可见的f()
都不会改变。我对吗?const int
或const char *const
是常见的,但是在标题中将它们声明为int
或const char *
?如果没有,你推荐这种方式吗?为了保持第二个问题的目标,请列出这样做的利弊。一些软件公司坚持在可能的情况下标记函数参数const
,因为有一种思想可以表明你的函数更稳定(并且不易受到错误的重构),如果你这样做,因为你不能无意中修改输入参数。
C标准允许您在函数声明中使用非const
参数,在定义中使用const
。
就个人而言,我不这样做,因为我喜欢我的原型以符合我的定义。我想你也可能会混淆代码分析包。