如果我想扩展 C 宏,有哪些好的方法可以做到这一点(除了手动跟踪之外)?
例如,GTK_WIDGET_SET_FLAGS
,它使用一个宏,该宏使用一个宏,该宏使用一个(或两个)宏...
我只想看到它以某种方式自动扩展,而不是搜索每个宏、每一步。
UPDATE
我尝试了cpp,但似乎只做了第一遍
on:
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 directory
gtk/gtkwidget.h:35:31: gtk/gtkaccelgroup.h: No such file or directory
gtk/gtkwidget.h:36:27: gtk/gtkobject.h: No such file or directory
gtk/gtkwidget.h:37:31: gtk/gtkadjustment.h: No such file or directory
gtk/gtkwidget.h:38:26: gtk/gtkstyle.h: No such file or directory
gtk/gtkwidget.h:39:29: gtk/gtksettings.h: No such file or directory
gtk/gtkwidget.h:40:21: atk/atk.h: No such file or directory
gtk、atk、gdk目录都在当前工作目录下,那么如何让cpp在其中搜索呢?
btw, gcc -E
给出完全相同的输出cpp
Update2:
通过使用 gcc -E 并使用 -I 选项传递包含目录来解决包含路径问题
根据您使用的编译器,应该有一种方法可以在预处理器(宏扩展,编译器根本不知道宏)完成。
对于 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)