我正在尝试为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)
我之前一直得到错误的意外表达;
感谢快速回复,看起来我更倾向于函数调用而不是宏,因为它可能会加速繁琐.是否有使用函数调用而不是宏的性能影响?
我正在尝试为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)