2012-12-15 1 views
7

De C11 projet:Quel est le but de restrict dans tmpfile_s?

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

Quel est le but de la qualification ici restrict? Parce qu'il n'y a pas d'autres paramètres, le compilateur peut savoir que streamptr n'est pas aliasé sans restrict, n'est-ce pas?

+0

+1 pour couper les cheveux: P –

+0

Eh bien, cela empêche la fonction de retourner un fichier créé précédemment. Ce que vous attendez de tmpfile() à faire, maintenant jeté dans la pierre. –

Répondre

5

Il existe plusieurs variables globales qui ont le type FILE*, par exemple stdout et stderr par exemple. Donc, le restrict le plus à gauche indique clairement qu'aucun d'entre eux ne peut être retourné, le FILE* retourné ne correspond à aucun alias. La deuxième restrict offre la même garantie mais un niveau plus élevé, vous n'êtes pas autorisé à passer quelque chose comme &stderr dans cette fonction. (Bien stderr n'est pas nécessairement une variable dans le sens habituel, mais j'espère que vous voyez l'image.)

+0

Merci pour cette réponse Jens. Maintenant, je comprends. – md5