你可以看到我嘗試下面的事情:如何在C中進行這種巧妙的投射?
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;
}
正如你可以看到上面的Ç投工作,但宏觀版沒有,我究竟做錯了什麼?
如果你展開你的宏,看起來你並沒有試圖設置任何字段,即沒有引用.xmin,.ymin甚至是.dummy,左值只是擴展爲指向my_image的指針。 – JustJeff 2009-08-11 23:02:23
如果您有這樣的可能性,將來可能會通過預處理器(cpp)顯式運行它 - 它會在宏展開後向您顯示文本,因此任何錯誤都將更加明顯。對於你的例子,它顯示宏展開爲「((image_bounds *)(&my_image)); - > xmin = 20;」這有助於發現錯誤。 – 2009-08-11 23:16:32