【发布时间】:2021-03-08 01:01:40
【问题描述】:
我想访问结构中的成员,但检查该成员是否存在
#include <stdio.h>
int main()
{
struct MyStruct { int a;};
struct MyStruct temp ;
temp.a=3;
return 0;
}
有没有办法检查成员 a 是否在 struct m 中,如果不能使用 #ifdef 访问 b?
类似#ifdef MyStruct.a temp.a=3; #else temp.b=3; #endif
【问题讨论】:
-
如果该成员不存在,编译器将拒绝您的代码。不,没有一种自动方法来检测结构中是否存在用于条件编译的成员。您可以手动设置代码,例如
#define MEMBER_A_EXISTS 1或#define MEMBER_A_EXISTS 0,具体取决于成员a是否存在,然后测试该宏。这听起来像是XY Problem——你真正的问题是什么? -
@JonathanLeffler 对,所以我想在编译前检查一下
-
不,那不可能。
-
如果
a不存在,b会成为struct MyStruct的第一个成员吗?在这种情况下,有一个解决方案:*(int *)&temp = 3;(struct的第一个成员和struct本身可以通过强制转换互换) -
@DavidRanieri 你是对的,我的错。我看了一眼这个问题,以为它在问别的问题(即你能检查指针是否是特定结构的成员)