关闭。这个问题是off-topic .它目前不接受答案。
想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。
8 年前关闭。
Improve this question
首先,我希望这个问题不要太开放。作为用于编码标准/策略、库/API 比较等的成分。我希望为形容词“库安全”建立正式或至少半正式的定义。为了不将我自己的观点或其他武断的最佳实践观点强加于定义中,我想避免过度限制性的定义。作为我的意思的一个例子,认为任何访问静态存储持续时间的非const限定对象或改变其他进程全局状态(例如信号处置)的代码是库不安全的可能是一个工作定义,但是它比它需要的要严格得多。
我希望捕获的基本属性是:
我认为对这个问题有益的答案类型将是对过去定义这个概念的类似尝试的引用,将定义放在一起的强有力的想法,或者令人信服的论点,即试图精确地定义这个概念是徒劳的。
顺便说一下,我已经标记了这个 C、C++ 和 POSIX,因为这些是我最有兴趣应用这样一个定义的上下文。在其他语言的上下文中它可能不太有趣;例如,在非常纯的函数式语言中,所有代码都应该被认为是“库安全的”。
提议的定义:
如果存在程序 A 和 B 使得库 L 是库不安全的:
最佳答案
我同意您不访问非常量限定的全局状态的标准可能过于严格。特别是库中的 C 代码修改 errno
可能是完全合理的。让更高级别的代码知道为什么会发生故障。
许多要求(无论如何我会看到它们)可能比代码本身更适用于文档。修改 errno
很好,但肯定需要记录。
对于 C++ 代码,异常安全有点类似。显然,您希望大多数代码能够(合理地)提供最强大的异常安全性,但是所提供的确切级别远不如它所提供内容的文档重要。
关于c++ - 定义 "library-safe"代码的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16258901/