- 主题:请教一个默认参数值的问题
公司用的一个SDK,虽然一直都有更新,但是没有什么特别亮眼的新特性,为了稳定,所以我们有10多年没有更新。
去年开始这个SDK加入了一些特别亮眼的新功能,所以我们准备切到这个新的SDK上去。接口兼容性都还好,该有的类,函数,宏基本没变,毕竟都是向前兼容的。
但是最近发现有一些功能不正常,然后经过调试,发现是某些函数默认参数和以前的参数不一样了。比如矩形参数,以前宽和高的默认值是4和3,现在都变成了1和1。用这些默认参数创建出来的矩形就不一样了。
因为这个开发包已经经历了10年的变化,所以头文件的位置名称注释的样式都已经完全不一样了,所以没法用对比工具来对比,找出到底是哪些默认参数变化。
不知道有没有一种办法,不需要靠堆人力吧,能够把所有这些变化的默认参数值给找出来。因为这个SDK还是比较大的,纯粹头文件就有5兆多。基本上都是c++头文件,有一小部分是com接口头文件。
发自「今日水木 on 自动铅笔」
--
FROM 222.129.54.*
这个不太可能了,这是最基础的库
【 在 here080 的大作中提到: 】
:
: 建议你换SDK
: 这种默认值变化属于不兼容的变化。
: 如果这个SDK可以做这种变化,那指不定还有什么别的不兼容变化呢。
发自「今日水木 on 自动铅笔」
--
FROM 114.242.250.*
就不知道这个东西需要花多大精力,并且能不能搞出来心理也没底,另外就是要花多少时间,准确度高不高也不好验证
【 在 phhada 的大作中提到: 】
:
: 提供一个思路
: 找个开源的语法分析器之类的库
: 提取所有函数的信息,再比对
: 成功了希望分享下,谢谢
:
: --
发自「今日水木 on 自动铅笔」
--
FROM 114.242.250.*
我们基于这个sdk的开发代码差不多有500w行
并且更麻烦的是这个sdk是作为我们的sdk一块儿发出去的
不说别的公司,就我们自己公司基于我们sdk的二次开发应该也有几百万行
这东西已经快成行业标准了
【 在 beijing2duck 的大作中提到: 】
:
: Now you need a DSL wrapper as a new instrusive layer here.
: --
发自「今日水木 on 自动铅笔」
--
FROM 114.242.250.*
我曾经试过,太麻烦了
我是基于文本的方式解析的,后来发现完全搞不定宏这个东西
楼上有人建议找个c++的词法分析,这玩意没碰过
所以上来求求办法
【 在 windd123 的大作中提到: 】
:
: 自己写一个?
: 把老的头文件函数声明自动解析出来,再把新的也解析一遍,然后互相比较。
: c的容易些,c++的只怕比较复杂。
:
: --
发自「今日水木 on 自动铅笔」
--
FROM 114.242.250.*
准备堆人力对比头文件了
找到调用函数更困难,代码多,并且还有不属于我们自己的代码
【 在 z16166 的大作中提到: 】
: 貌似只有自己解析对比这条路
: 再有就是找出所有调用到这个sdk中的函数的地方,只要这些函数有默认参数,就改代码,加上明确的参数值。
: 假如sdk有1万个函数,你只用到了其中的2千个,只处理这2千个。少的话手工,多的话还是得自动解析。
: ...................
--
FROM 106.120.112.*
谢谢
确实sdk中有很多非常规的写法,我写了2天语法解析就搞不下去了
【 在 here080 的大作中提到: 】
: 基本只能手动干。C++语法分析非常复杂。不规范的SDK尤其
:
--
FROM 106.120.112.*
谢谢我试试,vs竟然也有这个插件
【 在 ble 的大作中提到: 】
: 用clang-tidy 先把使用了缺省参数的调用都找出来,建议平时使用带ClangTidy集成的IDE并把相应选项打开,逐步禁止在项目中使用缺省参数。
: clang-tidy -fuchsia-default-arguments you-file.cpp
:
--
FROM 106.120.112.*
所以10年不愿意升级
【 在 here080 的大作中提到: 】
:
: 你们给SDK升级前没有进行过可行性分析吗?
: 就算你们有办法能搞定这个默认参数的问题,像这种坑爹的SDK指不定哪里还埋着坑呢。
: 能发现的问题都是小问题。就怕哪里有个坑炸了都不知道……
发自「今日水木 on 自动铅笔」
--
FROM 124.64.18.*
我们花了一个半月左右比较过接口,包括类函数大约有4w个左右
只是当时所有人都忽略了默认参数这个东西,感觉再来一次实在是不值当
【 在 here080 的大作中提到: 】
:
: 话说这个SDK中的接口函数大概有多少个?有没有合理的使用命名空间?
: 如果接口函数和类型总数量不太过份的话,你们可以用某些工具做批量转换,比如将:
: bad::Foo()
: 自动转成
: good::Foo()
发自「今日水木 on 自动铅笔」
--
FROM 222.129.55.*