文档章节

SDK开发C++接口定义潜规则

赫拉蒂姆
 赫拉蒂姆
发布于 2017/08/12 14:23
字数 1168
阅读 6
收藏 0

前言  

  在很大很大的生产环境中,我们工作只是生产过程的一个环节,这就导致了我们经常会使用别人提供动态库,组件,插件等等,我们也会提供给别人相同的东西可以让我们的产品接入到他人的产品中。但是东西多了,迭代久了,业务膨胀,越来越多人使用总会出现这样那样的问题,越往后期,大家更多的是关心你提供什么功能,如何使用功能,以及接下来要说的接口。

 

原则

   接口定义需要考虑东西很多,系统性,兼容性,易用性等等。

   1. 接口定义需要通俗易懂,符合使用者习惯, 人们更多关心函数名字,参数类型,对文档关心程度并不高,通俗易懂的接口会减少使用者查阅文档时间,也减少我们自己的时间。

   2. 接口必须做到兼容性,而且已做好接口不能改动, 别人用了你的接口, 如果改动会导致使用者的代码改动,使用人一定情绪,所以要么内部适配,要么新增接口以满足新的需求,命名上面尽量使用版本相关后缀例如_V1, _V2。少用Ex,各个版本的接口风格要尽量一致。

   3. 资源最好能在使用的时候加载,可通过设定初始化反初始化接口,要和业接口配合, 相同的业务功能使用相同的接口。

   4. 常用日志,错误码,断言。日志包括Debug/Error/Inf三个等级,错误码不可重复,如果使用他人提供SDK,错误要尽量兼容, 否则使用错误模块类型 + 错误码。断言能保证程序健全性,但需要非常熟悉代码。

 

注意事项

不要申请过大的栈内存

   当接口被过多的封装,层层嵌套,软件运行过程中,栈资源就很紧张,如果申请过大内存,当程序运行就会导致栈溢出。实际栈的大小只有2M,申请栈内存最好不大于10k,堆栈都是内存,不同就是栈内存使用完自动释放,堆内存需要new/malloc,使用完需要手动释放。

谁申请谁释放。

   不要内部申请了内存,外部释放,或者外部申请内存内部释放。这样在堆上申请很难定位,并且难以找到真正错误位置。

输入参数拷贝走

   外部传入的参数,特别是申请堆内存,内部如果要使用不要直接使用参数,最好能拷贝到内部申请的变量里。

字符指针参数加个长度

   字符串参数有传递通过字符指针char *p,可以对外提供指针长度Len,内部很难控制指针,不能判定*p内存到底来自哪里,是否转换,是否正确,所以加入长度以确定实际内存大小。

字节对齐

    字节对齐在结构体上问题较多,上面说到申请栈内存不要过大,同样申请一个结构体也可能出现问题,可能结构体本身也很大,尽量拆分结构体。有时使用者使用强制字节对齐,会导致结构体实际占用内存不同。

结构体内部定义使用数组

    结构体内部尽量使用数组或结构体数组,不要使用指针或长度,如果是堆内存很难定位,扩展性可以加入byte[Num]数组,长度大小可以通过是否扩展判断,如果扩展很多参数长度可以很大一般(64 - 256)

线程安全

    要保证接口线程安全,如果是初始化反初始化本身无法做到线程安全,但初始化后所有接口调用都要保证线程安全, 需要查看是否有全局变量,适当加锁。

使用回调用户自定义数据

    回调的时候使用用户自定义数据 void* pUserData,通过强转能获取使用者定义数据结构,通过数据结构调用相关回调函数。

 

 

© 著作权归作者所有

共有 人打赏支持
赫拉蒂姆
粉丝 0
博文 7
码字总数 6300
作品 0
齐齐哈尔
MFC、SDK和API有什么区别

MFC、SDK和API有什么区别 MFC Microsoft Foundation Class 微软函数类库 SDK (Software Development Kit,软件开发包) 软件开发包通常是一系列API函数,而MFC 是由微软公司提供的对API封装...

huanongkou
2013/03/20
0
0
OpenWRT开发之——对C++的支持(解决库依赖问题)

C++是本人的强项。如果在OpenWrt中不能用C++进行开发,那就有点大失所望了。 接下来将与大家一起来尝试写一个C++程序,并把它做成 ipk 包,并试运行。 各文件内容 在 SDK/package/ 路径下创建...

临峰不畏
2015/05/07
0
9
STL,ATL,WTL的联系与区别

STL,ATL,WTL的联系与区别 STL 即 Standard Template Library STL(标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时...

IMGTN
2012/06/04
0
0
C,C++,VC++,MFC之间有什么区别和联系

转载:http://blog.163.com/jackiehowe/blog/static/199491347201242011203225/ C语言是一种古老而又经久不衰的计算机程序设计语言,大约诞生于上个世纪60年代。由于它的设计有很多优点,多年...

80后小子
2015/07/03
0
0
STL,ATL,WTL之间的联系和区别

STL即 Standard Template Library (标准模板库) STL是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它...

AlphaJay
2010/06/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RESTful架构详解

1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主...

kitty1116
14分钟前
0
0
精通Spring Boot——第十篇:Quartz动态配置定时任务

定时任务简述 定时任务,在企业开发中尤其重要,很多业务都是需要定时任务去做的。比如说10点开售某件东西,凌晨0点统计注册人数,统计其他各种等等。这个时候不可能说让人为的去开启某个开关...

developlee的潇洒人生
16分钟前
0
0
将一些内容输出到文件中

看到一个面试题,如下: 第八题: 一个字符串将其输入到一个文件中,代码如下: <?php$a = '[{"teamId": "43", "serial": "1"},{"teamId": "1", "serial": "2"},{"teamId": "14", "serial":...

vinci321
25分钟前
0
0
nginx的简单使用:负载均衡

nginx:反向代理的服务器;用户发送请求到nginx,nginx把请求发送给真正的服务器,等待服务器处理完数据并返回,再把数据发送给用户。 nginx作为一个反向代理服务器,能缓存我们项目的静态文...

osliang
今天
2
0
网站title标题被改并被百度网址安全中心提醒的解决办法

国庆假日期间我们Sine安全接到众多网站站长求助网站标题被改导致在百度搜索中百度安全中心提醒被拦截,导致网站正常用户无法浏览网站被跳转到一些菠菜du博网站,而且很明显的一个特征就是在百...

网站安全
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部