Leo*_*ues 0 c macros compiler-errors
我在C中定义了以下结构:
typedef struct point{
float x;
float y;
float z;
} Point;
typedef Point Vector;
Run Code Online (Sandbox Code Playgroud)
和以下宏:
#define sub(p1,p2) {p1.x-p2.x,p1.y-p2.y,p1.z-p2.z}
Run Code Online (Sandbox Code Playgroud)
就像这样使用:
void fun(Point p0, Point p1){
Vector u;
u=sub(p1,p0);
}
Run Code Online (Sandbox Code Playgroud)
从我所看到的应该可以工作,或者我可能会遗漏一些甚至可能很明显的东西......但是我得到了以下错误,我不明白我应该做什么:
error: expected expression before '{' token
Run Code Online (Sandbox Code Playgroud)
所以基本上我只想获得相同的:
struct point u={p1.x-p0.x,p1.y-p0.y,p1.z-p0.z}
Run Code Online (Sandbox Code Playgroud)
我真的不知道我做错了什么......谢谢.
[编辑]包含更多功能细节,以便您可以看到我认为我的错误在哪里.没有使用变量声明进行初始化,因为更改后
Vector u;
u=sub(p1,p0);
Run Code Online (Sandbox Code Playgroud)
至
Vector u=sub(p1,p0);
Run Code Online (Sandbox Code Playgroud)
它有效,但我仍然不明白为什么.
这与宏无关:即使您手动扩展此宏,问题仍会存在.失败的原因是赋值中的初始化列表必须由常量表达式组成,因此p1.x不允许.
如果您使用的是C99,请更改宏以使用复合文字,如下所示:
#define sub(p1,p2) (Vector){p1.x-p2.x,p1.y-p2.y,p1.z-p2.z}
Run Code Online (Sandbox Code Playgroud)
这将允许您在赋值和初始值设定项中使用宏.
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |