C++代码规范

1、头文件

1.1、防止头文件重复包含
防止头文件重复包含的方法有两种:"#pragma once"和"#ifndef"
在此,只选择第二种,且命名方式为:__<PROJECT>_<PATH>_<FILE>_H__
1.2、前置声明
前置声明可以在QT源代码中大量看见
优点:
	可以减少编译时间, 多余的 #include 会迫使编译器展开更多的文件, 处理更多的输入;
	前置声明能够节省不必要的重新编译的时间。 #include 使代码因为头文件中无关的改动而被重新编译多次;
缺点:
	前置声明隐藏了依赖关系,头文件改动时,用户的代码会跳过必要的重新编译过程。
	前置声明可能会被库的后续更改所破坏。前置声明函数或模板有时会妨碍头文件开发者变动其 API. 例如扩大形参类型,加个自带默认参数的模板形参等等。
	前置声明来自命名空间 std:: 的 symbol 时,其行为未定义。
	极端情况下,用前置声明代替 #include 甚至都会暗暗地改变代码的含义。如下:
	// b.h:
	struct B {};
	struct D : B {};
	
	// good_user.cc:
	#include "b.h"
	void f(B*);
	void f(void*);
	void test(D* x) { f(x); }  // calls f(B*)
	如果 #include 被 B 和 D 的前置声明替代, test() 就会调用 f(void*) .

	前置声明了不少来自头文件的 symbol 时,就会比单单一行的 include 冗长。
	仅仅为了能前置声明而重构代码(比如用指针成员代替对象成员)会使代码变得更慢更复杂.
结论:
	函数:总是使用 #include.
	类模板:优先使用 #include.
1.3、#include 的路径及顺序
在正式项目中禁止包含如"."和".."这种特殊目录,且禁止头文件路径过长
如"google-awesome-project/src/base/logging.h"应简化为"#include "base/logging.h"
顺序:
	本cpp文件对应的头文件(没有则忽略)
	C 系统文件
	C++ 系统文件
	其他库的 .h 文件
	本项目内 .h 文件
	其他需要靠宏来判断是否包含的文件(如跨平台头文件)

这种优先的顺序排序保证当源文件遗漏某些必要的库时,编译会立即终止。
头文件按照稳定性排序,使得当本项目内头文件出现问题时也可以及时判断
注意:
	假设本源文件依赖base.h, 但foo.h已包含base.h文件,则此源文件也需同样包含base.h

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值