【问题标题】:Why do functions have two underscores为什么函数有两个下划线
【发布时间】:2012-10-31 14:56:53
【问题描述】:

我目前正在研究 ARM 的 u-boot 流程。我发现很多函数都采用这种格式__funcname__。为什么文件名前后要两个下划线?

【问题讨论】:

  • 因为实现函数的程序员在名字前后加了两个下划线。
  • 只是作者喜欢的命名约定。
  • 实际上它们是为实现而保留的,请查看*.com/questions/1449181/…
  • @H2CO3 和 Als:请参考 Nick 分享的链接。恐怕你误会了。
  • @ParthShah 我担心你在我的评论中没有得到轻微的讽刺。我已经阅读了大量这样的论文,并且在各种 POSIX 系统上进行了几年的 C 编程之后,我自然知道以下划线开头的标识符被实现保留。

标签: c u-boot


【解决方案1】:

它应该表明该函数在系统级代码中使用。我相信 some 编译器,它们的处理方式与普通函数不同。我不认为这真的是一个要求,但我认为这是曾经做过的事情,并且传统要么继续下去,要么您可能正在查看一些较旧的代码。

【讨论】:

    【解决方案2】:

    保留以两个前导下划线或前导下划线后跟一个大写字母的关键字。它们可以被标准库和操作系统使用。这样,这些函数就不会与用户空间中的函数名称发生冲突(如果发生冲突,那是用户的错,因为这些名称是保留的!)

    【讨论】:

    • +1 假设这是我们正在谈论的 C 或 C++。 IIRC 标准定义了一些特殊的 __whatever__ 符号,并且大多数编译器定义了更多 - 例如__GNUC__ 等预处理器符号和__builtin_popcount 等内置函数(设置位的计数)。但是还有更多类似的符号,除非您维护该编译器的库,否则您不应该知道这些符号。