你可以看到我在下面尝试做的事情:
typedef struct image_bounds {
int xmin, ymin, xmax, ymax;
} image_bounds;
#define IMAGE_BOUNDS(X) ((image_bounds *)(X));
typedef struct {
image_bounds bounds;
float dummy;
} demo;
int
main(void) {
demo my_image;
/* this works fine */
((image_bounds *)(&my_image))->xmin = 10;
/* why doesn't this work? i get the following error:
/* In function main:
cast.c:20: error: expected expression before = token
*/
IMAGE_BOUNDS(&my_image)->xmin = 20;
return 0;
}
正如您从上面可以看到的那样 C 投射有效,但宏版本没有,我做错了什么?
答案 0 :(得分:15)
您需要从IMAGE_BOUNDS的定义中删除分号:
#define IMAGE_BOUNDS(X) ((image_bounds *)(X))
答案 1 :(得分:2)
在没有宏的版本中,您在->xmin
之前有=
,而在没有宏的版本中则没有。{/ p>