#include 通常不会包含 .cpp 文件,如果包含的话,一般仅会包含如 static 的函数这样不会因为多次包含而导致链接问题的。
为了防止重复包含,头文件中都会有相应的处理,比如加上
#ifndef _STDIO_H_
#define _STDIO_H_
// 真正的头文件内容
#endif
这样在多次包含的时候,因为已经定义了 _STDIO_H_,所以第二次包含的内容会被忽略。
比较新的 C++ 编译器也支持 #pragma once,这样只要在头文件开头写上这一句,编译器就会在处理头文件的时候不包含多次了。
#include原则上只能包含头文件,不能包含cpp文件,否则可能出现重复定义的问题。
stdio.h等标准库头文件中已经含有防止重复包含的预编译指令,多次包含这些文件也不会出现任何问题。