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

时间:2016-07-29 13:47:37

标签: c pointers const header-files

我最近在阅读关于const关键字作为C中的函数参数的用法,并且在When and for what purposes should the const keyword be used in C for variables中提到了使用它的方法并且被接受为正确答案。在这篇文章中,有一点提到

  

永远不要在函数原型中使用const来传递参数   值。它没有任何意义,因此只是“噪音”。

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

有任何解释吗?

2 个答案:

答案 0 :(得分:5)

你引用的陈述有点误导,因为在C中,所有参数都是按值传递的。 * 我想它试图区分参数本身和,对于作为指针的参数的特殊情况,他们的指称。

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

* 但请注意,数组永远不会传递。在函数调用表达式中,就像在大多数情况下一样,数组值"衰减"到指针,那些指针是按值传递的。这会产生与通过引用传递数组时相似但不相同的效果。

答案 1 :(得分:3)

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

有些人喜欢在定义中标记尽可能多的参数const,因为它可以防止对功能参数的无意修改;这可能会引入错误。我本人不这样做,但很多房子(包括总部设在苏格兰的大型银行)都坚持这种风格。