首页 > 解决方案 > 是否可以检测到 C 结构有一个字段?

问题描述

如果结构有成员,我需要在编译时通过宏检测。我已经尝试过offsetof(struct object, a_field),但它会导致在编译时发出关于不存在字段的错误。是否有其他方法可以检查 C 结构是否有字段?

我需要这个作为宏

MESSAGE(obj, method, ...) obj->method(obj, ##__VA_ARGS);

这样我也可以在非虚拟方法上使用它,例如:

MESSAGE(obj, method, ...) method(obj, ##__VA_ARGS);

因此,通常要检测是否存在method成员,如果有,则将其称为 asobj->member(obj, …)和 as member(obj, …)else。

标签: cstructoffsetof

解决方案


类型在编译时是已知的。这意味着您不能使用尚未在此类结构中声明的结构字段。您可以使用该字段,如果此类结构的提供者未正确声明该字段,则编译器会出错,但无法有条件地检查它。


推荐阅读