Addendum: > > > - 'restrict' should NOT be used for multiple output parameters of the > > > same type, when only a single word is written through each parameter. > > > Example: ssize_t copy_file_range (int ifd, off_t *ipos, int ofd, > > > off_t *opos, > > > size_t len, unsigned flags); > > > Rationale: It is OK to have ipos and opos point to different elements > > > of the same off_t[] array. > > > > Ouch, this is exactly the opposite of what I would have wanted, since I > > want > > 'restrict' to tell the caller "these should not be aliases" and I want that > > to > > be true for *IPOS and *OPOS. (I'm not sure what is meant by 'single word' > > here; > > surely it shouldn't matter whether the type is a struct....) Could you > > explain > > more where the 'same array' rule comes from? > > The "same array" rule comes from what I understood from various explanations > of 'restrict' on the web [1], and from what I see in the glibc headers for > functions that have multiple output parameters of the same type
Also, I thought that passing pointers to different elements of the same array would produce warnings. But I was mistaken: This code does NOT produce warnings. ================================================================================ #include <stddef.h> extern int copy_file_range (int, long *restrict, int, long *restrict, size_t, unsigned int); int infd; int outfd; long offsets[2]; int copy_block (void) { return copy_file_range (infd, &offsets[0], outfd, &offsets[1], 4096, 0); } ================================================================================ Bruno