代码之家  ›  专栏  ›  技术社区  ›  klutt

是什么原因导致标准库中的某些函数看起来只是包装器或别名?

c
  •  0
  • klutt  · 技术社区  · 4 年前

    当我研究glibc的源代码时,我有时会无意中发现一些函数是包装器,它们什么也不做,只能作为别名使用。例如:

    int
    rand (void)
    {
      return (int) __random ();
    }
    

    为什么会这样?为什么不把尸体拿走 __random() rand() ?

    0 回复  |  直到 4 年前
        1
  •  6
  •   Myst    4 年前

    这是一个非常具体的问题,因为这种行为有多种原因。一个答案不能涵盖所有案件的全部原因。

    例如,一些编译器包含各种特定于系统的“内置”实现,因此源/头文件只是告诉编译器将它们的实现放在其中。

    另一个原因是从一个更一般的函数类型转换成一个标准的一致类型。

    有些函数包含重复的功能(想想 printf 与。 fprintf(stdin,... ),并且使用包装器是一种保持代码更干爽的简单方法。

    明确地, __random long int int

    此外, __随机的 __random_r ,但添加了一个锁以使功能线程安全。

    重复使用相同的功能和微小的变化(全局线程安全状态)保持代码更加干涸。