hunting/doc/develop_standard.md
2024-05-16 11:47:19 +08:00

2.4 KiB
Raw Blame History

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. 注释

  • 注释必须使用英文,且使用翻译器翻译;   避免编码问题导致的乱码,且需要保证阅读困难时可使用翻译器翻译成可读的中文; 注: 注释翻译工具使用百度翻译

1.1.3. C++继承

  • 子类使用父类的函数时,函数前必须加父类名,降低阅读难度,没有父类名的一律为本类函数(有可能是虚函数);