Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the purpose of restrict in tmpfile_s?

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?

like image 518
md5 Avatar asked Dec 15 '12 15:12

md5


1 Answers

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.)

like image 70
Jens Gustedt Avatar answered Sep 19 '22 09:09

Jens Gustedt