libc_hidden_builtin_def (strspn)
我在
glibc-2.18/string/strspn.c
中找到了上面的代码。有人能解释一下这是什么意思吗。这对代码的其余部分重要吗?
以下是文件的内容:
#include <string.h>
#undef strspn
/* Return the length of the maximum initial segment
of S which contains only characters in ACCEPT. */
size_t strspn (s, accept) const char *s; const char *accept; {
const char *p;
const char *a;
size_t count = 0;
for (p = s; *p != '\0'; ++p) {
for (a = accept; *a != '\0'; ++a) {
if (*p == *a)
break;
if (*a == '\0')
return count;
else
++count;
}
}
return count;
}
libc_hidden_builtin_def (strspn)
最佳答案
有人能解释一下这是什么意思吗。
它是一个#define
d宏,在构建(非共享)libc.a时扩展为空,并且:
extern __typeof (strcspn) __EI_strcspn __asm__("" "strcspn");
extern __typeof (strcspn) __EI_strcspn __attribute__((alias ("" "__GI_strcspn")));
在编译libc.so.6时。
这样做的目的是定义一个符号别名
__GI_strcspn
,该别名的值与strcspn
相同,但不会从libc.so.6中导出(即,它是一个内部符号)。这对代码的其余部分重要吗?
是:
libc.so.6
中的其他代码可以调用此符号,而不可能将其插入库中。