我最近在阅读关于const
关键字作为C中的函数参数的用法,并且在When and for what purposes should the const
keyword be used in C for variables中提到了使用它的方法并且被接受为正确答案。在这篇文章中,有一点提到
永远不要在函数原型中使用
const
来传递参数 值。它没有任何意义,因此只是“噪音”。
我用这种方式它对我有用,但我不确定为什么这是一个噪声为参数传递的参数,而不是参考传递的参数的噪音(更恰当的指针C中的值,因为C中没有pass by value
和pass by reference
的概念。因此,当我将指针作为函数参数传递并使用const
关键字时,通过此解释;我必须为头文件中的声明和C文件中的定义执行此操作,但我不需要在声明(头文件)中使用const
关键字作为非指针参数,并且仅在使用时使用它在C文件中定义函数。
有任何解释吗?
答案 0 :(得分:5)
你引用的陈述有点误导,因为在C中,所有参数都是按值传递的。 * 我想它试图区分参数本身和,对于作为指针的参数的特殊情况,他们的指称。
无论如何,重点是const
- 在函数声明中限定函数参数不会向调用者传达任何信息。无论这种限定如何,该函数都无法修改任何参数的调用者副本,因为参数按值传递。
* 但请注意,数组永远不会传递。在函数调用表达式中,就像在大多数情况下一样,数组值"衰减"到指针,那些指针是按值传递的。这会产生与通过引用传递数组时相似但不相同的效果。
答案 1 :(得分:3)
这是规则。如果在函数的声明中,您没有标记参数const
,那么可以 在定义中标记它们const
有些人喜欢在定义中标记尽可能多的参数const
,因为它可以防止对功能参数的无意修改;这可能会引入错误。我本人不这样做,但很多房子(包括总部设在苏格兰的大型银行)都坚持这种风格。