我有这样的数据结构:
struct foo {
int id;
int route;
int backup_route;
int current_route;
}
以及一个名为update()的函数,用于请求对其进行更改.
update(42, dont_care, dont_care, new_route);
这真的很长,如果我在结构中添加一些内容,我必须在每次调用更新(...)时添加'dont_care'.
我正在考虑将结构传递给它,但事先用'dont_care'填充结构比在函数调用中拼写它更加繁琐.我可以使用默认值dont care在某处创建结构,并在我将其声明为局部变量后设置我关心的字段吗?
struct foo bar = { .id = 42, .current_route = new_route };
update(&bar);
将我希望表达的信息传递给更新功能的最优雅的方法是什么?
我希望其他一切都默认为-1("不关心"的密码)
我刚学会了X-Macros.您看过X-Macros的实际用途?他们什么时候成为工作的合适工具?
如果我想扩展一个C宏,有什么好方法可以做到这一点(除了手动跟踪)?
例如,GTK_WIDGET_SET_FLAGS它使用一个使用宏的宏(或两个)......
我希望看到它以某种方式自动扩展,而不是搜索每一个宏,每一步.
我试过cpp,但似乎只做了第一次传球
上:
GTK_WIDGET_SET_FLAGS(obj, 13)
Run Code Online (Sandbox Code Playgroud)
我扩展了包含文件,然后:
G_STMT_START{ ((GTK_OBJECT_FLAGS (obj)) |= (13)); }G_STMT_END
Run Code Online (Sandbox Code Playgroud)
这是由这些错误消息解释我在stderr上得到这个(当使用-o filename时)
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在其中搜索呢?
顺便说一句,gcc -E给出完全相同的输出cpp
通过使用gcc -E并使用-I选项传递include目录来解决包含路径问题
我想弄清楚的是,如果像这样的东西(用C语写):
#define FOO 15
#define BAR 23
#define MEH (FOO / BAR)
Run Code Online (Sandbox Code Playgroud)
被允许?我希望预处理器替换每个实例
MEH
Run Code Online (Sandbox Code Playgroud)
同
(15 / 23)
Run Code Online (Sandbox Code Playgroud)
但我不太确定它会起作用.当然,如果预处理器只通过代码一次,那么我认为它不会按照我想要的方式运行.
我找到了几个类似的例子,但所有这些都让我理解得太复杂了.如果有人能帮我解决这个简单的问题,我将永远感激不尽!