关于C++的命名约定 | Blurred code

关于C++的命名约定

2019/07/30

LastMod:2019/07/30

Categories: cpp

谷歌命名约定

本篇文章几乎照搬于谷歌命名约定,部分根据个人习惯有所改动,可供参考。

文件名

文件名全部小写,采用_连接单词。如my_useful_tools.cc是一个可以接受的命名。头文件一律采用h结尾,包含有内联函数,或者模板实现的头文件可以采用hpp结尾,实现文件一律采用cc后缀。

类型命名

类,结构体,类型别名(typedef),枚举(enum)采用驼峰命名法。如MyExcitingClass,不允许下划线。

变量命名

所有变量,包括函数参数,全部采用小写字母+下划线。 类的成员变量使用下划线_结尾。如

class MyExcitingClass
{
    public:
    ....
    private:
    std::mutex lock_;
    std::string char_buffer_;  //good.  Don't use charbuffer_ or CharBuffer_
}

谷歌建议结构体变量像正常变量一样命名,但是我认为应该同类等同,因为大量的C++代码不加区分的使用类与结构体。

常量

static const#define,constconstexpr以及确定有常量语义的变量,命名时都以小写字母k开头,并采用驼峰命名法。 如constexpr int kBufferSize = 1024

函数命名

谷歌推荐采用AddTableEntry()的驼峰命名法,但是考虑到STL大量函数(如std::to_string,std::vector::push_back等)采用_连接法,还是推荐使用小写字母+_命名。

命名空间

命名空间主要用小写字母来命名,避免无意义的命名空间,如namespace foo{}。 命名空间的标志可以设置的更加清楚,以避免出现以下情况

namespace logging
{
    ....   // tons of code
            }
        }
    }   //嵌套括号
}

大量的嵌套括号,即使在有IDE或者带有括号匹配的编辑器的辅助下,仍然可能出现括号数目不匹配的情况。 可以建立明确的标志,代表命名空间结束

namespace logging
{
    ....   // tons of code
            }
        }
    }   //嵌套括号
} //namespace logging

也可以定义一个命名空间宏


#if !defined(NAMESPACE_BEGIN)
#define NAMESPACE_BEGIN(name) namespace name {
#endif
#if !defined(NAMESPACE_END)
#define NAMESPACE_END(name) }
#endif

#NAMESPACE_BEGIN(logging)
{
    //tons of code
}
#NAMESPACE_END(logging)

枚举命名

enum类型往往带有常量的性质。因此谷歌推荐使用常量命名法来命名。如

enum class LogLevel
{
    kTrace = 0,
    kInfo = 1,
    ...
}

宏命名

宏命名建议采用全大写字母与下划线的方法,这也是C中常用的标志宏的方法。

#define MY_EXCITING_MACRO(x) ...