我一直碰到像__KERNEL__这样的小约定。

在这种情况下,__是内核开发人员使用的命名约定吗?还是以此方式命名宏的特定语法原因?

整个代码中都有许多这样的示例。

例如,某些函数和变量以_甚至__开头。

是否有特定原因?

似乎使用很广泛,我只需要澄清一下这些东西是否具有语法目的,或者仅仅是命名约定。

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

最佳答案

有几种情况:

  • 在面向公众的 header 中,即,libc将接管并放在/usr/include/linux下的任何内容,标准指定应定义哪些符号,并且该系统特定的任何其他符号应以下划线和大写字母或两个下划线开头。特别是这就是__KERNEL__的原因,因为它用在内核和libc中都包含的 header 中,并且某些声明是不同的。
  • 在内部代码中,约定通常是符号__somethingsomething的主力,不包括某些管理,通常是锁定的。这就是诸如__d_lookup之类的原因。与系统调用类似的约定是,sys_something是系统调用入口点,它处理与内核之间的上下文切换,并调用do_something进行实际工作。
  • _t后缀是typedef的标准库约定。例如。 size_tptrdiff_tfoff_t等。内核代码的内部类型也遵循此约定。
  • 关于c - Linux内核标识符中的前划线和下划线是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9432111/

    10-11 04:30