Search code examples
clinuxgccheader-files

How can I find the header files of the C programming language in Linux?


When I write C programs in Linux, and then compile them using gcc, I am always curious about where those header files are. For example, where stdio.h is. More generally, where is stdbool.h?

What I want to know is not only where it is, but also how to get those places, for example, using shell command or using the C programming language.


Solution

  • gcc -H ... will print the full path of every include file as a side-effect of regular compilation. Use -fsyntax-only in addition to get it not to create any output (it will still tell you if your program has errors). Example (Linux, gcc-4.7):

    $ cat > test.c
    #include <stdbool.h>
    #include <stdio.h>
    ^D
    $ gcc -H -fsyntax-only test.c
    . /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdbool.h
    . /usr/include/stdio.h
    .. /usr/include/features.h
    ... /usr/include/x86_64-linux-gnu/bits/predefs.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/gnu/stubs.h
    .... /usr/include/x86_64-linux-gnu/bits/wordsize.h
    .... /usr/include/x86_64-linux-gnu/gnu/stubs-64.h
    .. /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.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/typesizes.h
    .. /usr/include/libio.h
    ... /usr/include/_G_config.h
    .... /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h
    .... /usr/include/wchar.h
    ... /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h
    .. /usr/include/x86_64-linux-gnu/bits/stdio_lim.h
    .. /usr/include/x86_64-linux-gnu/bits/sys_errlist.h
    

    The dots at the beginning of each line count how deeply nested the #include is.