On Saturday, 12 January 2019 01:49:09 CET Jonathan Gray wrote: > On Fri, Jan 11, 2019 at 03:21:11PM -0800, William Ahern wrote: > > On Fri, Jan 11, 2019 at 10:43:25AM +0100, Stefan Fritsch wrote: > > <snip> > > > > > /* only used for sizeof, not actually allocated */ > > > extern struct virtio_pci_common_cfg ccfg; > > > > <snip> > > > > > #define CREAD(sc, memb) _cread(sc, \ > > > > > > offsetof(struct virtio_pci_common_cfg, memb), sizeof(ccfg.memb)) > > > > > > The compiler should optimize this to the same code as the complicated > > > macro above. You think this variant is acceptable? > > > > Maybe I'm missing something, but these are the more idiomatic constructs > > > > sizeof ((struct virtio_pci_common_cfg *)0)->memb > > sizeof ((struct virtio_pci_common_cfg){ 0 }).memb > > No, expanding the offsetof macro and avoiding __builtin_offsetof misses > the point of it.
It allows to get rid of the "extern struct virtio_pci_common_cfg ccfg;" though. That's an improvement. Stefan