代码阅读笔记


从.h开始

被忽视的#define

#define 在学习过程中被诟病没有类型检测,会出现检查不出来的问题,因为只做文本替换不做类型判断,容易出现问题。但是在阅读代码时候,发现#define在简化代码量,增加可读性方面作用很大,能很大程度上简化代码的书写。

在名称上,宏替换的所有指定字串,都使用大写字母+下划线连接符连接,这样在命名规范上保持统一有助于让代码可读性更好。

例如:
(1)对命名空间的简化

#define AMAP_SP_BEGIN namespace amap_sp {
#define AMAP_SP_END }

(2)对嵌套命名空间的简化,传入使用的子空间名称

#define AMAP_SP_BEGIN_NAMESPACE(x) namespace amap_sp { namespace x {
#define  AMAP_SP_END_NAMESPCAE(x) } }

(3)对使用命名空间的简化,使用define时候需要注意此部分是简单的文本替换,需要特别注意文本内容,比如分号

#define AMAP_SP_USE_NAMESPACE(x) using namespace amap_sp::x
#define  AMAP_SP_USE_SPACEROOT using namespace amap_sp;

(4)对命名空间中的内容进行简化

#define AMAP_SP_NS(x) amap_sp::x
#define NS_STD using namespace std;

(5)对智能指针的简化,define中的双井号代表直接连接两个部分,其中涉及字串的转移,所以需要使用连接符号进行转义

#define AMAP_SP_TYPEDEF_PTR(x) typedef std::shared_ptr<x> x##Ptr 

(6)对大字串的简化,例如函数体,使用define可以简化很多同质复写,简化代码量,提高代码可读性。此时的会出现换行保证可读性,但是其本质是一行的,需要用\符号表示换行连接

#define REGISTER_FACTORY(x)          \
    extern "C"&#123;                      \
    ModuleFactory* createFactory() &#123; \
        return new x();              \
    &#125;;                               \
    &#125;                                \
                                     \
    extern "C"&#123;                      \
    void destroyFactory(ModuleFactory* factory) &#123;\
        if (factory != NULL) &#123;                   \
            delete factory;                      \
        &#125;                                        \
    &#125;;                                           \
    &#125;                                            \

特别的,在使用函数体时候,可以像书写正常函数一样,指定若干形参,后面的代码段中作为参数使用。

#define SP_ERROECODE 505
#define GET_CONTEXT_SHAREDATA(contextname, type, kname, vname) \
    type* vname = NULL; \
    if (contextname->hasShareDate(kname)) &#123;\
        vname = contextname->getShareData<type>(kname);\
        if (NULL == vname) &#123;\
            contextname->setResult(SP_ERRORCODE, kname " null!");\
            return ProcessResult(ProcessResult::CHAIN_EXIT);\
        &#125;\
    &#125;\

上述代码段中,将一段固定流程的函数写成了模板的格式,使用define直接进行参数替换和字串替换

(7)对常用数据类型的简化,例如常用的string类型的key-value,set,vector,这些数据结构类型表示也可以用define进行简化。

typedef std::map<std::string, std::string> KeyValueMap;
typedef std::set<std::string> StringSet;
typedef std::vector<std::string> StringVect;

文章作者: zhangyuanes
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zhangyuanes !
评论
 上一篇
目录 Index 目录 Index
序本页面仅作目录占位,本身不含有任何内容,从各个方向📝记录自己阅读的内容。 计算机原理内存 Memory高性能内存分配器 jemalloc代码组织&编译与运行编译依赖安装工具 abxp编译框架 Scons
2022-09-28
下一篇 
框架代码阅读 框架代码阅读
First框架之所以能称之为框架,一定是在架构设计层面解决了一些问题:例如抽象了开发流程,定制了运行流程,结合设计模式和业务场景做了精巧的设计。 如何阅读代码1、 弄清项目的框架结构和各个项目模块的功能(输入什么,处理以后输出什么),把握整
2022-09-21
  目录