是否可以将实际参数定义为`const int`,但在头文件中将其声明为`int`?

Lon*_*ner 7 c arguments const parameter-passing

请参阅以下程序.

#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);
}
Run Code Online (Sandbox Code Playgroud)

在该程序中,函数的声明f()与定义不完全匹配.声明具有int a参数,但定义具有const int a参数.

以下是关于此计划的问题.

  1. 我相信这是可以的,因为调用的代码f()不必知道实际参数a是否被视为常量f().这一点细节是私密的f().这不是调用代码的关注点.就调用者而言,在任何一种情况下,int a在调用时它都可以改变f().我对吗?
  2. 将函数定义中的实际参数声明为const int或者将const char *const它们在标题中声明为just intconst char *?如果没有,你推荐这种方式吗?为了保持第二个问题的目标,请列出这样做的利弊.

Bat*_*eba 8

一些软件公司坚持在const可能的情况下标记函数参数,因为有一种思想观点表明你的函数更稳定(并且不易受错误的重构影响),如果你这样做,因为你不能无意中修改输入参数.

C标准允许您const在函数声明和const定义中使用非参数.

就个人而言,我不这样做,因为我喜欢我的原型以符合我的定义.我想你也可能会混淆代码分析包.