你如何定义一个接受C中的结构指针参数的宏?

时间:2015-02-14 19:59:17

标签: c macros struct

我在完成以下任务时遇到了问题。特别是,我有一个结构:

typedef struct {
  int x;
  int y;
} foo;

我正在尝试将以下操作定义为宏:

#define DO_SOMETHING(a,b) ((foo){a.x + b.x, a.y + b.y})

我尝试运行下面的代码,但是我从编译器收到一条错误,指出left operand of "." must be pointer to struct/union

int main()
{
  foo a = {1,2};
  foo b = {3,4};
  foo c = DO_SOMETHING(a,b);
  return 0;
}

我已经看了一会儿试图弄清楚我做错了什么,但我还没有找到一个好的答案。我想知道我能否得到一些帮助?

谢谢。

1 个答案:

答案 0 :(得分:3)

显然你正在使用C89 / C90的编译器。

1999年或之后定义的语言应按原样接受您的程序 "复合文字"在C99中引入。