为了学习纯 C(来自 C++),我决定使用结构和宏编写一个简单的数学库。
到目前为止,我将此作为测试宏:
#define MulVec2(dest,src) ((dest.x) = (dest.x) * (src.x); (dest.y) = (dest.y) * (src.y); return dest;)
typedef struct vec2f_s
{
float x, y;
}
vec2f_t;
在我的调用代码中,我有这个:
int main(void)
{
vec2f_t v, w;
v.x = 5.0f;
v.y = 2.0f;
w.x = 3.0f;
w.y = 3.0f;
v = MulVec2(v, w);
printf( "x => %f; y => %f \n", v.x, v.y );
return 0;
}
我的问题如下:
1)我是否需要编写一个单独的宏来将对象的指针/地址传递给宏?如果是这样,怎么做?例如,请注意MulVec2(dest,src)
宏假定传入的对象不是动态分配的,但我也希望支持这一点。
2)当我编译代码时,我得到这个错误:
../main.c: In function 'main':
../main.c:15:9: error: expected ')' before ';' token
../main.c:15:7: error: incompatible types when assigning to type 'vec2f_t' from type 'float'
我能做些什么来解决这个问题?
编辑
我应该澄清一下,我不打算为此只使用宏,但编写宏的原因是我不必为向量的双精度和浮点变量编写单独的函数。我希望通过遵循 DRY(不要重复自己)原则,尽可能地重复使用它。