linux 内核 - C 中函数的公共修饰符的含义


PUBLIC void main

这是来自Minix源代码的kernel.c。在这种情况下,公共的含义是什么?

它可能是这样定义的:

#define PUBLIC extern
#define PRIVATE static

哎呀,刚刚看了我的塔南鲍姆副本。它被定义为:

#define PUBLIC

即什么都没有。这只是一些"自我记录"。私人的定义正如我最初所说。您可以在Minix源文件中找到这些const.h

引自 Tanenbaum The Minix Book Operating Systems Design and Implementation 第三版 第 140 页第 3 段

PRIVATE 被定义为静态的同义词。未在其中声明它们的文件外部引用的过程和数据始终声明为 PRIVATE,以防止其名称在声明它们的文件之外可见。作为一般规则,如果可能,所有变量和过程都应使用局部范围声明。PUBLIC 定义为空字符串。来自kernel/proc.c的一个例子可能有助于阐明这一点。宣言

公共无效lock_dequeue(rp)

从 C 预处理器中出来为

无效lock_dequeue(RP)

static全局变量都有文件范围。因此,如果您定义全局变量或将函数设为静态,则这些变量仅在该文件中可见。也就是说,在多文件环境中,您只能访问该文件中的代码中的那些。

extern全局变量可从文件外部可见/访问。对于函数定义,extern是可选的,因为默认情况下它们在文件范围之外可见。

哈希将这些东西定义为PRIVATEPUBLIC只不过是添加了一个抽象层,以便更好地解释和理解实际意图。与OOP设计一样,私有和公共都有解释,添加相同的名称表明它们具有哪些属性。

我想它将被预处理器替换为更多的C(或空字符串)。

尝试在#define后使用PUBLIC进行搜索

PUBLIC 一词意味着它将该方法标记为编译单元的"公共接口"的一部分,也就是说,它是一个可以从当前源文件外部调用的方法。(这只是一个有根据的猜测)。正如其他人所指出的,PUBLIC 几乎可以肯定是一个预处理器宏,它扩展到一组适当的关键字/属性。

相关内容

  • 没有找到相关文章

最新更新