爲了學習純C(來自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(不要重複自己)原則儘可能地重複使用它。
你想在一個函數,而不是宏。 – chris
你爲什麼在宏中這樣做? –
函數肯定會讓事情變得更簡單。也就是說,由於C不支持重載,因此無法爲對象和指針創建相同的宏/函數。 – Mysticial