以下是strtol必须根据§ 7.22.1.4C11 (n1570) 声明的方式:
#include <stdlib.h>
long int strtol (const char *restrict nptr,
char **restrict endptr,
int base);
据我所知,restrict关键字意味着左值引用的对象*nptr只能用它或直接从它派生的值来访问。
然而,很多程序员,甚至是有经验的程序员,都是strtol这样使用的:
#include <stdlib.h>
strtol (p, &p, 10);
在这种情况下**endptr == **&p == *p == *nptr, 和行为未定义。这样对吗?