C / C++ / 奇思妙想 · 2024年 3月 10日 0

头文件路径搜索顺序五花八门,有没有规律?

258 次浏览

头文件搜索顺序规则

以GCC为例,用户头文件""和系统头文件<>先后顺序规则如下:

  • “”
    • 被编译的源代码文件所在当前目录
    • -iquote指定的路径(只用于引号括起来头文件,如多个路径,从左到右依次搜索)
    • -I指定的路径(如多个路径,从左到右依次搜索)
    • -isystem指定的路径(如多个路径,从左到右依次搜索)
    • 标准系统头文件路径
    • -idirafter指定的路径(如多个路径,从左到右依次搜索)
  • <>
    • -I指定的路径(如多个路径,从左到右依次搜索)
    • -isystem指定的路径(如多个路径,从左到右依次搜索)
    • 标准系统头文件路径
    • -idirafter指定的路径(如多个路径,从左到右依次搜索)

我曾经写过测试代码,证明了如上规则的正确性。当然,使用man gcc搜索-iquote也可以找到规则。

覆盖系统头文件

  • 找到如上规则"标准系统头文件路径"所在的位置,在此之前的路径(或选项指定的路径)都有机会达到覆盖系统头文件的可能。即,手写一个stdio.h, 放在源代码所在的路径,#include "stdio.h"不会再找系统头文件。类似的,利用-I .指定当前目录为系统头文件路径,#include <stdio.h>也不会再找系统stdio.h.