一、头文件包含顺序
根据《Google C++ 编程风格指南》,对于Foo.cpp,顺序推荐为:
- Foo.h
- C标准库
- C++标准库
- 其它库的头文件
- 本工程的头文件
另外,在包含头文件时应该加上头文件所在工程的文件夹名,可区分重名文件。即假如你有这样一个工程base,里面有一个logging.h,那么外部包含这个头文件应该这样写:#include "base/logging.h",而不是#include "logging.h"。
二、防止头文件被重复包含
1. Include Guards(预处理器宏):这是防止头文件重复包含最常见的方法之一。在头文件的开头和结尾使用预处理器宏,如下所示:
#ifndef MY_HEADER_FILE_H
#define MY_HEADER_FILE_H
// 头文件内容
#endif // MY_HEADER_FILE_H
当头文件第一次被包含时,`MY_HEADER_FILE_H` 宏会被定义,头文件的内容会被包含。当头文件再次被包含时,由于宏已经被定义,头文件的内容将被忽略。
2. Pragma Once:使用 `#pragma once` 也可以达到相同的效果,它是一种更现代的方法。在头文件的开头加入 `#pragma once`:
#pragma once
`#pragma once` 指令告诉编译器只包含一次该头文件,不需要显式的宏定义和条件判断。
待续...