Псевдонимы аргументов в strtol

Вот как strtol должен быть объявлен в соответствии с § 7.22.1.4 из C11 (n1570):

#include <stdlib.h>

long int strtol (const char *restrict nptr,
                 char **restrict endptr,
                 int base);

Насколько я знаю, restrict Ключевое слово означает, что объект, на который ссылается lvalue *nptr будет доступен только с ним или со значением, непосредственно полученным из него.

Тем не менее, многие программисты, и даже опытные, используют strtol следующим образом:

#include <stdlib.h>

strtol (p, &p, 10);

В таком случае, **endptr == **&p == *p == *nptrи поведение не определено. Это правильно?

1 ответ

Решение

Нет. Ничего не доступно через **endptr в strtol, Только *endptr, совершенно отдельный объект, доступен.

Другие вопросы по тегам