我正在对接受命令行选项的程序进行一些维护。有单字母选项,也有长选项。目前,长选项前面有一个连字符。
许多工具的长选项都有双连字符。为了与现有内容保持一致,我查看了一些 GNU 工具,发现长形式混合使用了单连字符和双连字符。例如,GCC 编译器有 --help
、--version
与 -std
、-funroll-loops
.
所以我搜索了一些关于此事的文档,发现 this GNU document 。在那里,GNU 对长选项的风格建议是以两个连字符开头。
现在,我想知道为什么 GNU 工具不遵循这些 GNU 建议?我认为这是向后兼容性的问题,但还有更多吗?
在我编写的程序中,当更改选项语法时,我通常保留旧形式的功能但未记录,或者至少给出弃用警告。对于 GCC(和其他)程序来说不可能这样做吗?
最佳答案
有很多理由不改变:
- 实际上有数百万(可能更多?)使用现有命令行选项的配置脚本和构建文件。既有最近的,也有很旧的。
- 人们已经习惯了当前的格式,因此多年来大多数程序员都会出于习惯而使用他们已经知道的内容。
- 参数解析代码通常很复杂,更改它只是引入错误的另一个机会。
- 旧的向后兼容性单个连字符长选项会与新的多个短选项组合相冲突,因此向后兼容性很困难。
- 在此处插入更多内容。
更改原因:
- 遵循许多应用程序尚未遵循的约定。
简而言之,约定是好的,最好应该遵循新的东西,但通常不值得仅仅为了一致性而改变东西。
关于linux - 为什么 GCC(和其他工具)不遵循 GNU 命令选项约定准则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13899587/