作业宏写作

thi*_*ool 1 c c-preprocessor

我正在尝试为for循环中的以下重复代码编写一个宏.

for(i=0; i<n; i++) {
 a->x = b->x;
 a->y = b->y;
 a->z = b->z;
}
for(j=0;j<n;j++){
 a->x = c->x;
 a->y = c->y;
 a->z = c->z;
}

---------
with macro
#define COPY(x,y,z) \
a->x = x;\
a->y = y;\
a->z = z;\

for(i=0;i<n;i++)
 COPY(b->x,b->y,b->z);
for(i=0;i<n;i++)
 COPY(c->x,c->y,c->z);
Run Code Online (Sandbox Code Playgroud)

我之前一直得到错误的意外表达;


感谢快速回复,看起来我更倾向于函数调用而不是宏,因为它可能会加速繁琐.是否有使用函数调用而不是宏的性能影响?

Lun*_*din 7

我正在尝试为for循环中的以下重复代码编写一个宏.

请不要.它只有3行.您所要做的就是用晦涩难懂的家庭酿造语言语法来破坏您的代码.你已经设法写了一个致命的错误:不使用{}作为宏.在大多数情况下,类似函数的宏是非常糟糕的做法.

首先,你有没有理由不写*a = *b;

如果有这样的原因,那么考虑做这样的事情:

typedef struct // given this struct
{
  int x;
  int y;
  int z;
} xyz_t;

void xyz_copy (xyz_t* dest, const xyz_t* source)
{
  dest->x = source->x;
  dest->y = source->y;
  dest->z = source->z;
}
Run Code Online (Sandbox Code Playgroud)