libc_hidden_builtin_def (strspn)
我在glibc-2.18/string/strspn.c
找到了上面的代码。
有人可以解释这是什么意思。这对代码的其余部分是否重要?
以下是文件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)
答案 0 :(得分:3)
有人可以解释这是什么意思。
这是一个#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
内的其他代码可能会调用此符号,而无法将其插入例如LD_PRELOADED
图书馆。