本帖最后由 andeyqi 于 2019-4-26 09:40 编辑 背景: 今天和同事调试联调代码时出现一个死机,死机的原因是同事对外提供了个类似这样的接口 void fun(type,vodi * data),根据不同的type返回不同的数据类型。不过在出问题的场景同事的接口将一个值6直接赋给给void* data,内部解析时按照指针解析数据,结果可想而知访问非法地址肯定挂了。 主题: 后来和同事讨论下,这样传递值好像不好,传递值应该通过指针来获取数值6,不应该直接将6当作void* 的值传递,讨论半天他一直认为void * 是个万能类型怎么传都行,虽然实现上没有问题,不过个人认为这样对接口的使用者来说很容易出错。而且个人感觉除了有歧义外,这么写没有什么优点,而且通过这种方式能实现的传递地址也都能搞定的,想了半天没想到为什么要这么写,希望和大家讨论下看看大家有什么高见。 后续:
上述的伪代码中可以少定义一个变量,不需要定义int i ,6这个数字通过值的方式传递,而不是通过地址传递,不过传的是个非法地址出现死机,如果是个合法地址,那么代码就会使用未知的值。 |
对,问题倒不是什么问题接口描述清楚就行,这样除非又什么特殊的考虑,要不感觉没啥必要,怎么都要传个参数,传值或者传址,从设计的角度看感觉完全没有必要。
嗯,至少对外提供的接口要简单明了,不能一味的“”炫技“”,内部代码如果考虑以后别人维护的成本的话感觉也应该别让人有歧义,非要这么写的的话至少注释要写的清晰明了,便于让人理解。