mirror of
https://gitee.com/jiuyilian/embedded-framework.git
synced 2025-01-06 10:16:51 -05:00
75 lines
2.8 KiB
Markdown
75 lines
2.8 KiB
Markdown
# 1. SDK开发规范
|
||
|
||
## 1.1. 编码规范
|
||
|
||
### 1.1.1. 指针/智能指针
|
||
|
||
* C++编码只能使用智能指针;
|
||
* 指针遵循谁使用谁进行“非空”判断,且无比使用前进行“非空”判断;
|
||
* 智能指针经过转换后务必进行“非空”判断;
|
||
|
||
理论上,**明显不可能为空的指针,可以不进行“非空”判断**,可以不进行“非空”判断的场景:
|
||
|
||
```
|
||
void McuManagerImpl::OtherSideSendIpcMission(const unsigned int &serialNumber, const unsigned char &mission)
|
||
{
|
||
class McuRecvIpcMission : public McuRecvImpl, public McuRecv<unsigned char>
|
||
{
|
||
public:
|
||
McuRecvIpcMission(std::shared_ptr<McuManagerImpl> &mcuManager, const unsigned int &serialNumber,
|
||
const OtherSideSendType &sendType, const unsigned char &mission)
|
||
: McuRecvImpl(serialNumber, sendType)
|
||
{
|
||
McuRecv::mDataRecvReply = mission;
|
||
McuRecvImpl::mMcuManager = mcuManager;
|
||
}
|
||
~McuRecvIpcMission() = default;
|
||
void ReplyFinished(const bool result) override
|
||
{
|
||
// 此处可以不进行“非空”判断,该值在有限范围内(OtherSideSendIpcMission函数内部)就能看出是否为空
|
||
McuRecvImpl::mMcuManager->ReplyOtherSideSendIpcMission(ASK_RESULT::SUCCEED, McuRecvImpl::mSerialNumber);
|
||
}
|
||
};
|
||
std::shared_ptr<VMcuMonitor> monitor = GetMcuMonitor();
|
||
std::shared_ptr<McuManagerImpl> manager = std::dynamic_pointer_cast<McuManagerImpl>(SharedFromThis());
|
||
std::shared_ptr<VMcuRecv> recv =
|
||
std::make_shared<McuRecvIpcMission>(manager, serialNumber, OtherSideSendType::SEND_IPC_MISSION, mission);
|
||
if (monitor) {
|
||
monitor->RecvIpcMissionEvent(recv, static_cast<IpcMission>(mission));
|
||
}
|
||
else {
|
||
LogWarning("mMonitor is nullptr, AddMcuRecv.\n");
|
||
AddMcuRecv(recv);
|
||
}
|
||
}
|
||
```
|
||
|
||
**没有进行“非空”判断的代码,应该开发测试用例,保证“空指针”的报错。**
|
||
|
||
### 1.1.2. 注释
|
||
|
||
* 注释必须使用英文,且使用翻译器翻译;
|
||
  避免编码问题导致的乱码,且需要保证阅读困难时可使用翻译器翻译成可读的中文;
|
||
**注:** 注释翻译工具使用[百度翻译](https://fanyi.baidu.com/);
|
||
|
||
### 1.1.3. C++继承
|
||
|
||
* 子类使用父类的函数时,函数前必须加父类名,降低阅读难度,没有父类名的一律为本类函数(有可能是虚函数);
|
||
|
||
### 1.1.4. 变量命名
|
||
|
||
#### 1.1.4.1. 结构体/类成员
|
||
|
||
* 结构体和类成员必须要使用驼峰命名法,且首字母必须为m表示成员变量;
|
||
|
||
```
|
||
typedef struct app_get_product_info
|
||
{
|
||
app_get_product_info();
|
||
std::string mModel;
|
||
std::string mCompany;
|
||
std::string mSoc;
|
||
std::string mSp;
|
||
} AppGetProductInfo;
|
||
```
|