libc_hidden_​​builtin_def(strspn)是什么意思?

时间:2014-01-24 02:42:23

标签: c gnu glibc

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)

1 个答案:

答案 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图书馆。