#include 有哪些常见的不放在源文件开头的用法?

常见是对比其他不在源文件开头的用法,不是在源文件开头的用法。

问题我改了,之前是这个:
#include 有不放在源文件开头的用法吗?

《C++ Primer》第五版,中文版。p6。

 可以这么用,但是用的比较少。一般来说可以配合条件编译:
#if 某个操作系统平台
include 一些代码
#elseif
include 另一些代码
#endif

什么叫做不放在源文件开头,我理解只要放在你引用函数之前能找到就行,不知道对不对

实际上,这取决于你的代码的物理设计,即你的代码在文件中的分布。
理论上,如果你的每个头文件设计得足够的内聚,无论如何嵌套包含都不会出现问题。但是,这只是存在于理论上,实际的项目中做到比较因难。
因此,一个合理的建议:所有的.h中不包含.h,放在CPP中包含。但是每个模块有一个特殊的共通头文件,只用于包含该模块使用的外部的头文件,并且所有的cpp文件必须是最先包含该头文件。模块对外提供与内部使用的文件分目录存放。
这样做可以强制你清晰化模块之间的依赖关系(模块的共通头文件中的文件包含顺序就是你的模块依赖的顺序)。
如果把每组.h/.cpp文件看成一个小模块,你可以清晰的看出这些小模块之间的依赖顺序。