C++代码风格

1.编码风格

命名约定

1. 一般命名原则 “命名含义要准确,不要为了节省空间就随意使用缩写”
2. 首字母缩写词在需要时大写第一个字母
3. 文件命名全部为小写,单词之间没有符号。
4. 类型命名,类、结构体、枚举、类型定义(typedef)、等都遵循相同的命名方式:每一个单词d都是第一个字母大写。类型名一般为名词 类似:
	class FooBar
	{
		.....
	};
	
	struct BarBaz
	{
		.....
	};
	
	enum ColorChannel
	{
		.....
	};
	
	typedef hash_<UrlTableProperties *,string> PropertiesMap;
	
	using PropertiesMap = hash_map<UrlTableProperties *, string>;
5. 变量命名,变量名(包括函数参数),第一个字母小写,后边每一个单词的第一个字母大写
6. 类的成员加 m_ 前缀,结构体的成员变量不加任何前缀。全局变量加g_前缀,静态变量不加前缀。
	class UrlTableProperties
	{
		string n_name;
		int m_numEnteries;
	};
	
	struct ImageInfo
	{
		int width;
		int height;
	};
7. vector、list、map、等容器类型变量,使用名词的复数形式表示.
	vector<DateTime>holidays;
	map<Employee,Role> employeeRoles;
	Qvector<QImage> images;

函数命名

  • 函数命名

    • 函数的第一个字母小写后面每一个单词的第一个字母大写。QT中的SLOT采用hhe和函数一样的命名方式。
    	add();//动词
    	addTableEntry();//动词+名词
    	setColor();
    
  • 常量命名

    • 常量采用和变量命名相同的方式
    	const int dayInAWeek = 7;
    
  • 宏命名

    • 宏定义使用大写字母表示,单词之间使用下划线分割
    	#define ROUND(x) ...
    	#defined PI_ROUND 3.0
    
  • 名称空间命名

    • 名称空间采用和类型相同的命名,及每个单词的第一个字母大写
    namespace FooBar
    {
    	...
    };
    
  • 花括号的使用

    • 花括号应该独占一行使用,除非花括号用来表示可用一行代码表示inline的函数体,或表示初始化列表
    class Foo
    {
    public:
    	Foo();
    	~Foo(){};
    private:
    	struct Bar
    	{
    		...
    	};
    };
    
    
    
  • 空格的使用

    必须有一个空格的位置:
    - 二元操作符,包括赋值符号的两侧
    - 关键字和圆括号之间
    - 不在行末的逗号和分号后
    - 表示继承和初始化列表的冒号两侧
    - 只有一行语句的函数体的花括号与语句之间
    - delete和[]之间,以及[]和变量名之间
    
    不能有空格的位置:
    - 逗号和分号前
    - 圆括号和尖括号内侧
    - 函数名和圆括号之间
    - 一元操作符和操作数之间
    - 空的圆括号和花括号中
    - 表示初始化列表的花括号和值之间
    - 范围操作符(::)两侧
    - #号右侧
    	
    
  • 举例:

    class Foo : public Bar 
    {
    public:
    	Foo(int b) : Bar(), m_baz(b) {}
    	void reset() { m_baz = 0; }
    
    private:
    	int m_baz;
    }
    
    for (int i = 0; i < 5; ++i) 
    {
    	...
    }
    
    x = 0;
    x = -5;
    ++x;
    if (x && !y)
    {
    	...
    }
    delete [] buffer;
    
  • 表示指针和引用的符号& * 和类型名之间j加上一个空格但和&变量名之间不加空格

    char *fileName;
    const QString &fileName;
    

  • 空行的使用

    • 可以使用空行将代码分组,但不要使用超过一个空行
  • 头文件

    • 所有头文件都要使用#ifndef #define #endif防止头文件被多重包含。不要使用#pragma once。
    #ifndef FOO_BAR_H
    #define FOO_BAR_H
    ...
    #endif // FOO_BAR_H
    



  • 头文件本身应包含所有需要的头文件,以便在引用它时不需要首先包含其它的头文件。在头文件中,按照下面的顺序包含需要的头文件:C标准库,C++标准库,其它库的头文件,项目内的其它头文件。在引用头文件的.cpp文件中,总是把它对应的头文件放在其它所有头文件的前面。同种类型的头文件按照字母表的顺序决定哪个放在前面。避免包含不必要的头文件。

    // foo.cpp文件
    #include "foo.h" // foo.cpp related header
    #include <cmath> // C library
    #include <cstdlib> // C library
    #include <algorithm> // C++ library
    #include <vector> // C++ library
    #include <QWidgets> // Qt library
    #include "bar.h" // other header files in your project
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值