Question

From C11 draft:

C11 (n1570), § K.3.5.1.1 The tmpfile_s function
errno_t tmpfile_s(FILE * restrict * restrict streamptr);

What is the purpose of the restrict qualifier here?

Because there is no other parameters, the compiler is able to know that streamptr is not aliased without restrict, isn't it?

Was it helpful?

Solution

There are several global variables around that have type FILE* such as stdout and stderr for example. So the leftmost restrict clearly indicates that none of these can be returned, the returned FILE* doesn't alias with any other. The second restrict makes the same guarantee but one level higher, you are not allowed to pass something like &stderr in that function. (Well stderr is not necessarily a variable in the usual sense, but I hope you see the picture.)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top