- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在semantic versioning一般规则是仅在引入向后兼容功能时才增加次要编号,否则必须增加主要编号。 same approach ,但具有不同的算法,由 libtool 使用。
我有一个问题,关于什么是向后兼容的更改,什么不是。
假设我写了一个库,这个库的公共(public)头文件包含一个名为foo
的数据类型的typedef
。在版本 1.0.0 中,这个 typedef
看起来像这样:
typedef struct foo_t {
int x;
int y;
} foo;
然后我决定更改数据类型,在下一个版本中它看起来像这样:
typedef struct foo_t {
int x;
int y;
int z;
} foo;
我只在结构foo_t
中添加了一个字段。这似乎是一个向后兼容的更改,但上面的结构现在事实上是另一个结构。我所做的并不是引入一个新功能而保留所有其他功能不变,而是我更改了一些已经存在的东西。
上述数据类型通常用于与库函数交换数据,但用户可能将其用于其他目的。如果用户使用 1.0.0 版编写了程序并且最后的更改构成了向后兼容的更改,则用户的程序也必须使用这个新版本进行编译。
这个新版本将如何命名,1.1.0 还是 2.0.0?
编辑
您可以阅读此讨论的进一步发展 here .
最佳答案
这将是一个主要的版本更改。结构布局被嵌入到最终用户程序中。添加或成员是一项重大更改;无论哪种方式,布局都发生了变化。
引自Linux Program Library HOWTO — §3.6。不兼容的库:
When a new version of a library is binary-incompatible with the old one the soname needs to change. In C, there are four basic reasons that a library would cease to be binary compatible:
The behavior of a function changes so that it no longer meets its original specification,
Exported data items change (exception: adding optional items to the ends of structures is okay, as long as those structures are only allocated within the library).
An exported function is removed.
The interface of an exported function changes.
你说,“上面的数据类型通常用于与库的函数交换数据,但是用户可能将它用于其他目的。”如果该结构仅在内部使用而不在公共(public) API 中公开,您就可以了。但听起来用户可以自己分配一个结构变量,这意味着这是一个重大变化。
您可以使用 opaque structs 保护您的图书馆免受此类流失的影响.隐藏结构的内容,让用户只传递指针。这正是 FILE *
的工作原理:C 标准没有定义 FILE
的布局,我们作为最终用户不知道它里面有什么。
关于c - 语义版本控制 : minor or major change?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55088064/
我正在尝试提升我的 javascript 编程技能(或者说我的编程技能时期 :)) 所以我试图理解一些语义: 第一行的“?”是什么意思?均值和“-distance”中的减号 第二行中的“+=”或“-=
我正在尝试在语义 UI 中执行复选框,但它不起作用,我无法弄清楚我做错了什么。 我包括jquery、semantic.min.js、checkbox.js 和semantic.min.css,然后我添
我正在构建一个 Spring 后端。我有一个 Controller ,它获取一个“搜索对象” - 一个具有 10 个字段的对象,其中只有一个应该被填充,所以搜索功能(我没有编写,但需要对其进行更改和重
我面临着编写更智能/高级的“相关内容”算法的挑战,并且不知道从哪里开始,所以我决定提出一个问题,是否有人会指出我正确的方向。 我们的数据库包含很多文章,到目前为止,我们使用关键字/标签查询了相关文章,
我正在尝试将通用字符串写入Rust中的数字函数,其中支持的类型为i16,i32,i64,u32,u64,f32和f64。 最初我有这个: fn str_to_num(s: &str, default_
假设我们在 hpp 文件中有一个带有唯一指针的简单结构: struct SomeType { SomeType() = default; ~SomeType(); st
这是同一预处理指令的多个问题。 1 - <> 还是 ""? 除了在 MSDN 中找到的信息: #include Directive (C-C++) 1.a:这两种符号有什么区别? 1.b:所有编译器都
所以基本上我有一个带有列表的简单系统,当我选择一个项目时,它会显示描述和绑定(bind)到该项目的图像。 项目:https://jsfiddle.net/jhnjcddh/2/ 问题是我需要在 JS
很抱歉问了一个愚蠢的问题,但有人能告诉我以下是什么意思吗 for ctype, (codename, name) in searched_perms: 我不明白括号里是怎么回事。 for ctype
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Why do all these crazy function pointer definitions al
我正在学习 HTML5,并获得了一个将 CSS Zen Gardens 转换为 HTML5 语义版本的项目。我已经能够轻松地转换其中的大部分内容,但是底部的链接/导航给我带来了一些问题。 转换此/处理
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improv
我一直在我的 emacs c/c++ 开发设置中试验 cedet 和语义,除了一个小细节外,我对它非常满意。 我使用 ede-cpp-root-project 创建一个项目,并给出我的项目的根目录以及
引用问题自http://www.garfieldtech.com/blog/put-up-with-put (这是针对 Drupal 开源项目的,有点元,因为这里没有代码): GET、HEAD 和 P
我有以下代码。 let v_blue = UIView() v_blue.backgroundColor = UIColor.blueColor() l
我目前正在 objc.io 上阅读优秀的 Advanced Swift 书籍,但遇到了一些我不明白的问题。 如果您在操场上运行以下代码,您会注意到在修改字典中包含的结构时,下标访问会生成一个副本,但随
谁能给我一个关于 Flutter 上下文中语义概念的清晰解释(或链接)(它实际上是什么,何时使用,更新...)? 我在谷歌上搜索了很多,但到目前为止还没有找到任何好的解释。 非常感谢, 最佳答案 Di
这是我的代码 Was this what you wanted? It's good to see you again.
我有一个侧边栏,其中包含应用程序的主导航。它还包含一个 button 触发侧边栏的打开/关闭。在语义方面,标记应该是什么样的? 我应该把侧边栏放在一边,然后只在周围设置导航吗主导航,不包括打开/关闭触
考虑下面这行 Lisp 代码: (some-function 7 8 | 9) ;; some comment. note the extra indentation 该点位于“8”和
我是一名优秀的程序员,十分优秀!