我最近遇到了C函数,返回类型为void
,并在其前面添加了package
个关键字。
有人可以告诉我下面提到的C函数原型中package
的含义是什么吗?
package void function (void)
包的宏定义:
/* function and variable scope modifiers */
#define package //accessible within package only,used for functions only
答案 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);
但可能可能更清楚地知道或可以猜测PUBLIC
和PRIVATE
宏应该意味着什么的人类读者。
在您的情况下,您有:
#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”(源模块/文件)中具有作用域。我看到很多程序员都是这样做的。当然没有标准,所以每次我必须再次找到它“他在做什么?”