为什么在头文件中的函数声明中对于通过值传递的参数不需要const?

Swa*_*nil 5 c pointers const header-files

我最近在阅读关于const在C中使用关键字作为函数参数的方法以及使用它的方法已经在时间和内容中const提到关键字在C中用于变量并被接受为正确答案.在这篇文章中,有一点提到了这一点

永远不要const在函数原型中使用值传递的参数.它没有意义,因此只是'噪音'.

我用这种方式,它适用于我,但我不知道为什么这是通过值传递的参数的噪音,但不是参考传递的参数的噪音(更恰当的是C中的指针值,因为没有pass by value和的概念pass by reference在C).因此,当我将指针作为函数参数传递并使用const关键字时,通过这种解释; 我必须为头文件中的声明和C文件中的定义执行此操作,但我不需要const在声明(头文件)中使用关键字作为非指针参数,并且仅在定义函数时使用它C档.

有什么解释吗?

Bat*_*eba 6

这是规则。如果在函数的声明中没有标记参数const,则可以const定义中标记它们。

有些人喜欢在定义中标记尽可能多的参数const,因为这样可以防止无意中修改函数参数;这可能会引入错误。就我个人而言,我不这样做,但很多银行(包括一家总部位于苏格兰的大型银行)都坚持这种风格。


Joh*_*ger 5

您引用的语句有点误导,因为在C中,所有参数都是按值传递的.* 我认为它试图区分参数本身,并且对于作为指针的参数的特殊情况,它们的指示物.

无论如何,重点是 - const在函数声明中对函数参数进行限定不会向调用者传达任何信息.无论这种限定如何,函数都无法修改任何参数的调用者副本,因为参数是按值传递的.

*请注意,但是,阵列根本就不会通过.在函数调用表达式中,与大多数上下文一样,数组值"衰减"到指针,并且这些指针按值传递.这会产生与通过引用传递数组时相似但不完全相同的效果.