我正在查看代码ls.c
并注意到对xstrtoul()
. 我想知道这个有用的函数到底是在哪里定义的。这导致了我xstrtol.h
,它有以下片段:
# define _DECLARE_XSTRTOL(name, type) \
strtol_error name (const char *, char **, int, type *, const char *);
_DECLARE_XSTRTOL (xstrtol, long int)
_DECLARE_XSTRTOL (xstrtoul, unsigned long int)
_DECLARE_XSTRTOL (xstrtoimax, intmax_t)
_DECLARE_XSTRTOL (xstrtoumax, uintmax_t)
如果我理解正确,预处理器通过后生成的函数原型将是:
strtol_error xstrtoul (const char *, char **, int, unsigned long int *, \
const char *);
xstrtol.c
然而,在is中定义的唯一相关函数__xstrtol()
具有以下签名:
strtol_error
__xstrtol (const char *s, char **ptr, int strtol_base,
__strtol_t *val, const char *valid_suffixes)
我的猜测是,不知何故,编译器每次都映射这个函数的多个实例,用另一个名称代替__xstrtol
,另一种类型代替__strtol_t
. 但我不明白这是在哪里/如何完成的。#define
(在顶部的这两个中只有一个xstrtol.c
)。