c - 为什么在 C 语言中不经常使用 const 指针

标签 c constants

<分区>

在 C 中很难看到使用 const 指针的代码片段和真实代码。

举例:

FILE *fopen(const char *filename, const char *mode);

我的问题是。为什么在我看来,我可能很难肯定这一点,人们通常不使用 const 指针,即使使用它是有意义的? 在我的示例中,fopen 可能在两个参数中都有 const 指针。

我知道如何使用 const,我知道它是如何工作的。我的问题更多是从软件工程的角度出发,以及为什么编写大型库的人不经常使用它。有理由不在专业代码中使用 const 指针吗?通常我只会在书籍和代码片段中看到很多关于 const 的内容。

最佳答案

C 的早期版本(远早于 1989 年第一个 ANSI 标准)根本不支持 const。因此标准库中的函数,如 fopen() 最初是在没有 const 限定符的情况下指定的。

在一些专业设置中,出于向后兼容的原因,有时仍然需要使用旧代码和旧编译器(虽然随着时间的推移这种情况越来越少,但它们仍然存在,并且由于各种原因将继续存在一段时间).这要求在这些设置中使用的库保持向后兼容。

除非有这样的特定约束,否则最好适本地使用 const 编写现代代码(例如,指示函数不会更改通过指针传递的参数)。这提供了更多检测程序员错误的机会(例如,更改参数的函数,调用者假定该参数未更改)。

代码不使用 const 的一个常见原因是程序员(或者更糟的是,客户)更关心快速交付 - 交付能够编译并通过一些测试用例而没有错误的代码是优先级为 1,但让代码在所有可能的意外事件中正常工作被认为不那么重要(或其他人的问题)。在这样的设置中,const 会导致更多的编译错误(例如,由于函数更改了标记为 const 的内容),因此需要更多的精力和时间来编译代码。而省略 const 意味着代码更容易编译。使用现代文本编辑器和 IDE 可以很容易地删除代码库中的所有 const 实例(除非它使用无法作为源代码使用的第三方库)——而且表面上会导致编译错误的数量增加降低。相反,识别代码中 const 有用的所有地方更加困难,并且在代码库中增加 const 的使用最有可能的直接奖励是需要做更多工作来修复无法编译的代码。

换句话说,const 的好处不是立竿见影的,所以对于短期内“不交付或死亡”心态的开发人员/经理/客户来说并不重要,他们不必随后修复他们留下的问题。

关于c - 为什么在 C 语言中不经常使用 const 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42181881/

相关文章:

c - C 文件中使用相同的 goto 标签但功能不同

c++ - const_cast 和 std::move 从非引用中删除常量

c++ - 将字符串变量与一组字符串常量进行比较的最佳方法是什么?

c++ - 我可以传递伪装成数组的常量指针吗?

iPhone - NSError 引用 : constants and code

c - 从 fgets() 输入中删除尾随换行符

c - 支持c程序中的插件

c - 使程序在按下某个键时发出状态报告

c - [功能] 之前出现错误 : expected '=' , ',' 、 ';' 、 'asm' 或 '__attribute__'

javascript - 为什么 const 与 javascript 中的简单对象不同