2012-12-15 9 views
7

Od C11 projektu:Jaki jest cel ograniczenia w tmpfile_s?

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

Jaki jest cel restrict kwalifikator tutaj?

Ponieważ nie ma innych parametrów, kompilator może wiedzieć, że streamptr nie ma aliasu bez restrict, czyż nie?

+0

+1 za podział włosów: P –

+0

Zabronione jest zwrócenie pliku, który został wcześniej utworzony. Czego można oczekiwać od tmpfile(), teraz odłożonego w kamień. –

Odpowiedz

5

Istnieje kilka zmiennych globalnych, które mają typ FILE*, na przykład stdout i stderr na przykład. Tak więc skrajnie lewa restrict wyraźnie wskazuje, że żadna z nich nie może zostać zwrócona, zwrócony FILE* nie ma żadnego aliasu. Druga restrict daje taką samą gwarancję, ale o jeden poziom wyżej, nie możesz przekazać czegoś takiego jak &stderr w tej funkcji. (Cóż, stderr niekoniecznie jest zmienną w zwykłym znaczeniu, ale mam nadzieję, że zobaczysz zdjęcie.)

+0

Dzięki za tę odpowiedź Jens. Teraz rozumiem. – md5