如何查看 C 头文件的源代码?

J E*_*Eti 1 c c++ bash header-files

我想查看一些函数和结构的规范。在我正在经历的教程中,它说

see the gdk/gdkkeysyms.h header file for a complete list of GDK key codes.
Run Code Online (Sandbox Code Playgroud)

我记得我曾经(偶然)打开了math.h的文件, 但我已经用

find -name 
find -wholename
Run Code Online (Sandbox Code Playgroud)

Bash 中的命令,但无法执行,互联网也没有解决我的问题。

ric*_*ici 5

如果您使用的gcc是已安装的系统,则可以使用包含的 C 预处理器打印出所有包含文件的完整路径。当然,这假设您以gcc可以找到它的方式安装了头文件。

对于简单的系统头文件,您可以轻松提取路径:

$ cpp -H -o /dev/null - <<<'#include <sys/time.h>' |&head -n1
. /usr/include/x86_64-linux-gnu/sys/time.h
Run Code Online (Sandbox Code Playgroud)

注 1:|&head -n1仅导致输出的第一行 - 定向到stderr- 被打印。完整输出包含整个包含树,点表示包含深度。

注2:以上假设你使用的是C。如果头文件是C++,你需要告诉cpp,使用-x标志:

$ cpp -H -o /dev/null -x c++ - <<<'#include <vector>' |&head -n1
. /usr/include/c++/5/vector
Run Code Online (Sandbox Code Playgroud)

对于头文件需要-I选项的库,您可以尝试使用pkg-config找到正确的编译器选项(假设您知道正确的包名称):

$ cpp -H -o /dev/null $(pkg-config --cflags gdk-2.0) - <<<'#include <gdk/gdkkeysyms.h>'|&head -n1
. /usr/include/gtk-2.0/gdk/gdkkeysyms.h
Run Code Online (Sandbox Code Playgroud)

为了在我的系统上找到包名,我自己查询pkg-config,然后猜测需要哪个:

$ pkg-config --list-all | grep gdk
gdk-pixbuf-2.0                 GdkPixbuf - Image loading and scaling
gdk-2.0                        GDK - GTK+ Drawing Kit (x11 target)
gdk-pixbuf-xlib-2.0            GdkPixbuf Xlib - GdkPixbuf rendering for Xlib
gdk-x11-2.0                    GDK - GTK+ Drawing Kit (x11 target)
Run Code Online (Sandbox Code Playgroud)