C语言中公共修饰符的含义

时间:2011-05-16 10:41:15

标签: c linux-kernel minix

PUBLIC void main

这是来自Minix源的kernel.c。在这种情况下PUBLIC是什么意思?

4 个答案:

答案 0 :(得分:9)

它可能是这样定义的:

#define PUBLIC extern
#define PRIVATE static
哎呀,只是看着我的Tanenbaum副本。它被定义为:

#define PUBLIC

即。没什么。这只是一点“自我记录”。 PRIVATE定义为我最初说的。您可以在Minix源文件const.h中找到它们。

答案 1 :(得分:3)

引自Tanenbaum的Minix Book操作系统设计与实现第三版第140页第3页

  

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

     

PUBLIC void lock_dequeue(rp)

     

以C预处理器的形式出现

     

void lock_dequeue(rp)

static个全局变量具有文件范围。因此,如果您定义一个全局变量或使一个函数静态,那么这些只在该文件中可见。也就是说,您只能在多文件环境中访问该文件中的代码中的那些内容。

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

将这些内容定义为PRIVATEPUBLIC的哈希只是添加了一个抽象层,以便更好地解释和理解实际意图。在OOP设计中,私人和公共有解释,添加相同的名称表明他们有什么属性。

答案 2 :(得分:1)

我想它会被预处理器替换为更像C(或者为空字符串)。

尝试使用#define

PUBLIC后搜索

答案 3 :(得分:0)

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