簡體   English   中英

帶有{}的C宏

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM