google c++ style

本文详细介绍了C++编程中的文件命名规范、局部变量初始化、类复制与赋值限制、命名规则、命名空间、枚举命名、宏命名、代码长度限制及逻辑换行等核心内容,旨在提供一套清晰、易于理解的编程风格指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 头文件命名规范

#ifndef <project>_<path>_<file>_H_

#define <project>_<path>_<file>_H_

#endif <project>_<path>_<file>_H_

例子:

#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_
...


#endif  // FOO_BAR_BAZ_H_
说明 文件src/bar/baz.h文件在项目FOO中


2.  尽量声明完局部变量给其初值

int i ;

i = g();  // Bad

int i  = g(); // good

vector<int> v;

v.push_back(1);

        v.push_back(2); // prefer --

       vector<int> v = {1,2} ; // good --


3. 如果一个类中需要复制或赋值功能,尽可能提示类似CopyFrom()或Clone()等成员函数,而禁掉复制构造函数与赋值重载=函数,因为这样能避免隐式转换,

如果想禁掉复制或赋值能函数,只需要在private里声明,但是不实现,这样别人调用时就会提示link error,方法如下

#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
  TypeName(const TypeName&);               \
  void operator=(const TypeName&)

       Then, in class Foo:


class Foo {
  public:
  Foo(int f);
  ~Foo();

private:
  DISALLOW_COPY_AND_ASSIGN(Foo);
};


4. 命名规则

  4.1 文件命名

文件名应该全部小定,可以包括下划线("_")和连接符(“-”)

              Examples of acceptable file names:


my_useful_class.cc
my-useful-class.cc
myusefulclass.cc
myusefulclass_test.cc

内联功能必须在.h里面,如果你的内联代码非常短,直接在.h里给出实现

  4.2 类型命名

类型应该以大写字母开始,每一个新的单词都应该以大写开头,不要有下划线,classes, structs, typedefs, and enums都使用这一规则

       // classes and structs
class UrlTable { ...
class UrlTableTester { ...
struct UrlTableProperties { ...


      // typedefs
typedef hash_map<UrlTableProperties *, string> PropertiesMap;


      // enums
enum UrlTableErrors { ...

4.3 变量命名

变量命名全是小写,可以随便有下划线(“_”),如果是类的成员变量带上m_,如果是全局变量使用g_开头

            For example:
string table_name;  // OK - uses underscore.
string tablename;   // OK - all lowercase.
string tableName;   // Bad - mixed case.

4.4 常量命名

不管是什么常量变量,统一使用k开头

const int kDays = 365;

4.5 函数命名

常规的函数应该以一个大写字母开头,中间不能有下划线

例如:

 AddTableEntry()

DeleteUrl()

set与get类型的函数,他们以变量命名规则

例如:

void setnum(int num); or void set_num(int num);

int getnum(int num); or    int  get_num(int num);

4.6 命名空间(namespace)

所有字母小写,可以依据项目名 路径名 类名结合来命名,自由发挥

4.7 枚举命名

简单点说,枚举全大写,并且可以有下划线

例如:

ENUM_NAME

4.8 宏命名(macro)

与枚举一样

例如:

#define ROUND(x) ...
#define PI_ROUNDED 3.0

4.9 每行代码长度不要超过80

4.10 对于要表达式要换行显示,逻辑符号永远在上一行末尾

例如:

if( aaaaaaaaaaaa == 10 &&

    bbbbbbbbbbbb == 11 &&

   cccccccccccccc == 12 )

{

}


以上来源于http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

本人只是简单的翻译了一些自己想记录的内容

<think>好的,我现在需要回答用户关于“Google C++ Style Guide”的问题。首先,用户可能已经知道这是一个编码规范,但需要更详细的解释。 首先,我得回忆一下GoogleC++风格指南的基本信息。这个指南是Google为其内部C++代码制定的规范,旨在保持代码一致性和可维护性。接下来,我需要确认它的主要内容和特点。 用户可能想知道这个指南包括哪些方面,比如格式、命名约定、头文件管理、类设计等。此外,可能还要说明为什么这个指南重要,以及它与其他风格指南的不同之处。 需要提到的是,尽管名为C++指南,但用户之前的问题是关于C语言的,所以可能需要指出虽然主要针对C++,但部分内容也适用于C,比如命名规范和代码结构。但也要注意区分,避免混淆。 另外,用户可能想知道如何访问这个指南,是否需要链接,但根据要求不能提供链接,所以只能建议他们通过搜索引擎查找。 还要考虑用户可能的实际应用,比如是否推荐他们遵循这个指南,以及是否有其他替代方案。不过根据用户的问题,可能只需要客观介绍,不需要比较。 需要确保回答结构清晰,分点说明主要内容、特点、适用场景等。同时语言要简洁,避免技术术语过多,让初学者也能理解。 最后检查是否有遗漏的重要点,比如代码示例,但根据之前的回答,用户可能不需要具体代码,而是概述。所以总结主要部分即可。</think>以下是关于Google C++ Style Guide的详细介绍: --- ### **Google C++ Style Guide是什么?** 这是Google为内部C++项目制定的**代码编写规范**,旨在统一编程风格、提升代码可读性和维护性。虽然主要针对C++,但其部分规范(如命名约定、格式要求)也适用于C语言项目。 --- ### **核心内容解析** 1. **代码格式** - 缩进:**2空格**(非Tab) - 行宽:**80字符**限制 - 函数/类:大括号换行风格 ```c // 函数定义示例 void do_something(int param) { if (condition) { // ... } } ``` 2. **命名规范** - 变量:小写+下划线(`my_variable`) - 常量:k开头+大写(`kMaxSize`) - 函数:动词+小写(`calculate_sum()`) - 类型名:大写驼峰(`MyClassType`) 3. **头文件管理** - 禁止使用`.cc`包含`.cpp`文件 - 头文件保护宏格式:`PROJECT_PATH_FILE_H_` - 尽量使用`#include "project/header.h"`格式 4. **内存与资源** - 禁止使用裸指针(C++特性,C语言不适用) - 强调资源获取即初始化(RAII)原则 5. **异常与错误处理** - 禁用C++异常机制(但对C语言无影响) - 建议使用错误码返回机制 --- ### **主要特点** | 特性 | 说明 | |-------|------| | **严格性** | 比ISO标准更严格(如禁用RTTI) | | **工具友好** | 兼容clang-format等自动化工具 | | **性能导向** | 禁止影响性能的特性(如异常处理) | | **跨平台** | 注重Linux/Windows/macOS兼容性 | --- ### **适用场景** 1. 大型多人协作项目 2. 需要长期维护的代码库 3. 对代码可读性要求高的场景 4. 企业级代码审计需求 --- ### **争议与批评** 1. **部分规则过于严苛** - 例如禁用C++11的auto关键字(后期已放宽) 2. **与社区习惯冲突** - 如函数参数顺序:输入参数在前,输出参数在后 3. **不完全符合ISO标准** - 选择性禁用某些C++特性 --- ### **学习建议** 1. **阅读方式** - 官方英文文档(可通过搜索引擎找到) - 中文社区翻译版本(注意版本差异) 2. **实践工具** ```bash # 使用clang-format自动格式化 clang-format -i --style=google myfile.c ``` 3. **替代方案参考** - LLVM Coding Standards - Linux Kernel Coding Style(更贴近C语言) --- 遵循该规范可使代码具有**工业级健壮性**,但初学者建议先掌握基础语法再深入学习规范细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值