gpt4 book ai didi

c - 查看扩展的 C 宏

转载 作者:太空狗 更新时间:2023-10-29 16:19:12 25 4
gpt4 key购买 nike

如果我想扩展 C 宏,有什么好的方法(除了手动跟踪它)?

例如,GTK_WIDGET_SET_FLAGS,它使用了一个宏,这个宏又使用了一个(或两个)宏......

我只想看到它以某种方式自动扩展,而不是搜索每个宏、每个步骤。

更新

我试过cpp,但是好像只做了第一遍

在:

GTK_WIDGET_SET_FLAGS(obj, 13)

我展开了包含文件,然后:

G_STMT_START{ ((GTK_OBJECT_FLAGS (obj)) |= (13)); }G_STMT_END

这是由这些错误消息解释的,我在 stderr 上得到了这个(当使用 -o 文件名时)

gtk/gtkwidget.h:34:21: gdk/gdk.h: No such file or directorygtk/gtkwidget.h:35:31: gtk/gtkaccelgroup.h: No such file or directorygtk/gtkwidget.h:36:27: gtk/gtkobject.h: No such file or directorygtk/gtkwidget.h:37:31: gtk/gtkadjustment.h: No such file or directorygtk/gtkwidget.h:38:26: gtk/gtkstyle.h: No such file or directorygtk/gtkwidget.h:39:29: gtk/gtksettings.h: No such file or directorygtk/gtkwidget.h:40:21: atk/atk.h: No such file or directory

gtk、atk、gdk目录都在当前工作目录下,怎么让cpp在里面搜索呢?

顺便说一句,gcc -E 给出与 cpp

完全相同的输出

更新2:

包含路径问题通过使用 gcc -E 并使用 -I 选项传递包含目录来解决

最佳答案

根据您使用的编译器,应该有一种方法可以查看 preprocessor 之后的代码(宏展开,编译器根本不知道宏)完成。

对于 gcc,选项是 -E .这是一个简化的示例,使用玩具代码而不是实际的 GTK+ 宏:

~/tmp> cat cpptest.c
#define SET_FLAGS(w, f) ((w)->flags |= (f))

int main(void)
{
SET_FLAGS(0, 4711);

return 0;
}
~/tmp> gcc -E cpptest.c
# 1 "cpptest.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "cpptest.c"


int main(void)
{
((0)->flags |= (4711));

return 0;
}

关于c - 查看扩展的 C 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/985403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com