C11(n1570)strtol
に従って宣言する方法は次のとおりです。§ 7.22.1.4
#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
、、、および動作は未定義です。正しいですか?