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

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

在这种情况下, __内核开发者使用的命名约定还是这种命名macros的语法特定原因?

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

例如,一些函数和variables以_或甚至__开头。

这是否有特定的原因?

它似乎相当广泛的使用,我只是需要澄清,这些东西是否有句法目的,或者它只是一个命名约定。

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

有几种情况:

  • 在面向公众的头文件中,即任何libc将接管并放在/usr/include/linux ,这些标准指定了哪些符号应该被定义,并且系统特有的其他符号应该以下划线和大写字母或者两个下划线开头。 特别是这是__KERNEL__的原因,因为它用在内核和libc中的头文件中,并且一些声明是不同的。
  • 在内部代码中,通常情况下,约定__something对于something不包含某些管理的内容是很重要的,通常是锁定的。 这是__d_lookup类的原因。 系统调用的类似约定是, sys_something是系统调用入口点,处理上下文切换到内核和调用do_something来执行实际的工作。
  • _t后缀是_t的标准库约定。 例如size_tptrdiff_tfoff_t等。 内核代码也遵循这个约定,它也是内部类型。