[英]C macro with {}
我在C中定義了以下結構:
typedef struct point{
float x;
float y;
float z;
} Point;
typedef Point Vector;
和以下宏:
#define sub(p1,p2) {p1.x-p2.x,p1.y-p2.y,p1.z-p2.z}
這樣使用:
void fun(Point p0, Point p1){
Vector u;
u=sub(p1,p0);
}
從我閱讀的內容來看,這應該行得通,或者也許我遺漏了一些甚至很明顯的東西……但是我遇到了以下錯誤,我不知道我應該看什么:
error: expected expression before '{' token
所以基本上我只想獲得以下內容:
struct point u={p1.x-p0.x,p1.y-p0.y,p1.z-p0.z}
我真的不知道我在做什么錯...謝謝。
[EDIT]包含更多功能詳細信息,因此您可以查看我認為我的錯誤所在的位置。 不使用變量聲明進行初始化,因為更改后
Vector u;
u=sub(p1,p0);
至
Vector u=sub(p1,p0);
它有效,但我仍然不明白為什么。
這與宏無關:即使您手動擴展此宏,問題仍然存在。 失敗的原因是賦值中的初始化程序列表必須由常量表達式組成,因此不允許使用p1.x
如果您使用的是C99,請將您的宏更改為使用復合文字 ,如下所示:
#define sub(p1,p2) (Vector){p1.x-p2.x,p1.y-p2.y,p1.z-p2.z}
這將使您可以在分配以及初始化程序中使用宏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.