2012-12-15 3 views
7

Von C11 Entwurf:Was ist der Zweck von beschränken in tmpfile_s?

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

Was ist der Zweck des restrict Qualifier hier?

Da es keine anderen Parameter gibt, kann der Compiler wissen, dass streamptr kein Alias ​​ohne restrict ist, oder?

+0

+1 für Haarspaltung: P –

+0

Nun, es verbietet die Funktion jemals eine Datei zurück, die zuvor erstellt wurde. Was Sie erwarten würden, tmpfile() zu tun, jetzt in Stein gemeißelt. –

Antwort

5

Es gibt mehrere globale Variablen, die den Typ FILE* haben, wie z. B. stdout und stderr. Der am weitesten links liegende restrict zeigt klar an, dass keiner von diesen zurückgegeben werden kann, der zurückgegebene FILE* aliasiert nicht mit anderen. Die zweite restrict macht die gleiche Garantie, aber eine Stufe höher, Sie dürfen nicht so etwas wie &stderr in dieser Funktion übergeben. (Nun stderr ist nicht unbedingt eine Variable im üblichen Sinne, aber ich hoffe, Sie sehen das Bild.)

+0

Danke für diese Antwort Jens. Jetzt verstehe ich. – md5