C中“package”关键字的含义是什么?

时间:2015-03-16 03:51:13

标签: c

我最近遇到了C函数,返回类型为void,并在其前面添加了package个关键字。

有人可以告诉我下面提到的C函数原型中package的含义是什么吗?

package void function (void) 

包的宏定义:

/* function and variable scope modifiers */ 

#define package //accessible within package only,used for functions only

3 个答案:

答案 0 :(得分:4)

package不是任何C标准中的keyword

也许是因为你没有向我们展示一些头文件#define

编辑: package被定义为零,因此它对您的程序没有任何影响。也许如果你告诉我们这个头文件是什么,以及你正在尝试使用的其他代码,我们可能会理解为什么它存在。

答案 1 :(得分:3)

有时,您希望在声明中与读者沟通的信息与C 允许通信的信息不同。

例如,C使用static关键字可能会造成混淆。在块作用域的对象声明中,它会影响对象的存储持续时间;在文件范围(任何函数体外)的对象声明上,它会影响链接。

程序员有时会尝试通过定义更清晰表达意图的宏来扩展语言。

例如,我可能会写:

#define PUBLIC extern
#define PRIVATE static

PUBLIC void func1(void);
PRIVATE void func2(void);

就编译器而言,这完全等同于:

extern void func1(void);
static void func2(void);

可能可能更清楚地知道或可以猜测PUBLICPRIVATE宏应该意味着什么的人类读者。

在您的情况下,您有:

#define package //accessible within package only,used for functions only

所以package被替换为空。 (恕我直言,最好定义PACKAGE,所以读者很明显这是一个宏,然后是:

package void function (void);

编译器忽略单词package。它旨在向人类读者传达函数function旨在“仅在包内访问” - 无论这意味着什么。

C语言没有“包”的概念。 C程序的最大组织单位是翻译单元,由源文件及其#include直接或间接组成。

代码的作者可能会想到“包”的定义。也许它是一些定义明确的翻译单元集合 - 在这种情况下,没有C语法来表达作者想要的限制。

此类问题的一个问题是虽然package 看起来像,但它可能是一个关键字,但它并没有被编译器强制执行。也许有另一种工具可以检查源文件是否正确使用package - 或者可能完全由代码的维护者来正确使用它。

在不知道“包”是什么的情况下,无法确定package伪关键字应该是什么意思。我希望这个词在某个地方准确记录。

答案 2 :(得分:2)

这可以让作者(程序员)给读者(维护程序员)一些关于意图和结构的额外信息。从注释“仅在包中访问,仅用于函数”,它也可以定义为:

#define package static

现在所有带有“package”的函数都将声明为static,并且仅在“package”(源模块/文件)中具有作用域。我看到很多程序员都是这样做的。当然没有标准,所以每次我必须再次找到它“他在做什么?”