Linux内核标识符中前导和尾部下划线的含义是什么?

A.S*_*ith 7 c linux kernel coding-style

我一直在运行像这样的小公约__KERNEL__.

__在这种情况下,通过内核开发者使用的命名约定,或者是它命名宏这样一个语法具体原因?

整个代码中有很多这样的例子.

例如,某些函数和变量以a _或even 开头__.

这有什么特别的原因吗?

它似乎被广泛使用,我只需要澄清一下这些东西是否具有语法目的,还是只是一个命名约定.

此外,我看到许多用户声明的类型,如uid_t.我再次假设这是一个命名约定,告诉读者它是用户定义的类型?

Jan*_*dec 5

有几种情况:

  • 在面向公众的标头中,即libc将接管和放置的所有标头中,/usr/include/linux标准指定应定义哪些符号,并且该系统特定的任何其他符号均应以下划线和大写字母或两个下划线开头。这就是__KERNEL__特别的原因,因为它用于内核和libc中都包含的标头中,并且某些声明是不同的。
  • 在内部代码中,惯例通常是符号__somethingsomething排除某些管理(通常是锁定)的主力军。这就是诸如此类的原因__d_lookup。与系统调用类似的约定sys_something是系统调用入口点,它处理与内核之间的上下文切换,并do_something进行实际工作。
  • _t后缀是typedef的标准库约定。例如size_tptrdiff_tfoff_t和这样的。内核代码的内部类型也遵循此约定。