从C11草稿:
C11(n1570),§K.3.5.1.1
tmpfile_s
功能
errno_t tmpfile_s(FILE * restrict * restrict streamptr);
此处restrict
限定符的用途是什么?
因为没有其他参数,编译器能够知道streamptr
没有restrict
没有别名,不是吗?
答案 0 :(得分:5)
有几个全局变量具有类型FILE*
,例如stdout
和stderr
。因此,最左边的restrict
清楚地表明这些都不能返回,返回的FILE*
不会与其他任何别名相同。第二个restrict
提供相同的保证但更高一级,您不能在该函数中传递&stderr
之类的内容。 (好stderr
不一定是通常意义上的变量,但我希望你能看到这张照片。)