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)

最佳答案

有人能解释一下这是什么意思吗。
它是一个#defined宏,在构建(非共享)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中的其他代码可以调用此符号,而不可能将其插入库中。

10-05 19:52