【问题标题】:Meaning of public modificator for function in CC中函数的公共修饰符的含义
【发布时间】:2011-05-16 10:41:14
【问题描述】:
PUBLIC void main

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

【问题讨论】:

    标签: c linux-kernel minix


    【解决方案1】:

    大概是这样定义的:

    #define PUBLIC extern
    #define PRIVATE static
    

    糟糕,刚刚查看了我的 Tanenbaum 副本。定义为:

    #define PUBLIC
    

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

    【讨论】:

      【解决方案2】:

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

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

      公共 void lock_dequeue(rp)

      来自 C 预处理器

      void lock_dequeue(rp)

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

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

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

      【讨论】:

        【解决方案3】:

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

        尝试使用PUBLIC 搜索#define

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-05-25
            • 2013-08-05
            • 2019-07-15
            • 2017-01-03
            • 2017-11-11
            • 2011-01-31
            • 2016-11-22
            相关资源
            最近更新 更多