我对 C 有点陌生,所以我仍在学习绳索。我无法让预处理器宏按照我想要的方式工作。这是情况,我有一个这样的结构:
struct super {
int data1;
int data2;
int condition;
};
我想创建一个这样的宏:
#define getdata(s) (s.condition ? s.data1 : s.data2)
这样我就可以做这样的事情:
getdata(s) = 4 // stores in data1 if condition, data2, if not.
但这并不完全有效。
为什么它不起作用,我该如何纠正它?
最佳答案
以这种方式改变它(三元运算符从不返回 C 中的左值):
#define getdata(s) (*((s).condition ? &(s).data1 : &(s).data2)
变化:
不过,请注意
s
将被评估两次。 (您可以使用内联函数或依赖于实现的魔法来解决这个问题。)inline int* getdata(struct super* s) {return s->condition ? &s->data1 : &s->data2;}
#define getdata(s) (*getdata(&s))
关于c - 根据宏中的条件选择结构成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26310676/