Псевдонимы аргументов в 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
, совершенно отдельный объект, доступен.