有时候添加了-I选项,指定自定义的路径时,可能和系统路径的头文件冲突,为了确定使用哪个头文件。可以使用-H选项。
比如,有一个test.c,尖括号包含time.h
1 2 3 4 5 6 7 | $ cat test.c #include <time.h> void main() { } |
然后
1 2 3 4 5 | $ touch time .h $ cc -I. -H test .c . . /time .h Multiple include guards may be useful for : . /time .h |
可以看到,-I选项影响尖括号包含的搜索路径,如果没有指定-I.,则使用的是系统的头文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | $ cc -H test.c . /usr/include/time.h .. /usr/include/features.h ... /usr/include/x86_64-linux-gnu/sys/cdefs.h .... /usr/include/x86_64-linux-gnu/bits/wordsize.h .... /usr/include/x86_64-linux-gnu/bits/long-double.h ... /usr/include/x86_64-linux-gnu/gnu/stubs.h .... /usr/include/x86_64-linux-gnu/gnu/stubs-64.h .. /usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h .. /usr/include/x86_64-linux-gnu/bits/time.h ... /usr/include/x86_64-linux-gnu/bits/types.h .... /usr/include/x86_64-linux-gnu/bits/wordsize.h .... /usr/include/x86_64-linux-gnu/bits/timesize.h .... /usr/include/x86_64-linux-gnu/bits/typesizes.h .... /usr/include/x86_64-linux-gnu/bits/time64.h .. /usr/include/x86_64-linux-gnu/bits/types/clock_t.h .. /usr/include/x86_64-linux-gnu/bits/types/time_t.h .. /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h .. /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h ... /usr/include/x86_64-linux-gnu/bits/endian.h .... /usr/include/x86_64-linux-gnu/bits/endianness.h .. /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h .. /usr/include/x86_64-linux-gnu/bits/types/timer_t.h .. /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h .. /usr/include/x86_64-linux-gnu/bits/types/locale_t.h ... /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h Multiple include guards may be useful for: /usr/include/x86_64-linux-gnu/bits/long-double.h /usr/include/x86_64-linux-gnu/bits/time64.h /usr/include/x86_64-linux-gnu/bits/timesize.h /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/x86_64-linux-gnu/gnu/stubs.h /usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h |