Zig*_*ggy 11 c private-header c-preprocessor
我最近一直在学习C,在我的一本教科书中,我找到了一个带有".r"扩展名的文件的引用.现在,你可以想象,谷歌搜索"r"或"文件扩展名r"没有效率,所以我想知道你是否可以帮助我.
它出现在以下代码块中
#include "new.r"
static const struct Class _String = {
sizeof(struct String),
String_ctor, String_dtor,
String_clone, String_differ
};
const void * String = & _String;
Run Code Online (Sandbox Code Playgroud)
作者提到它是一个"私人标题",但我希望他能更明确地知道究竟是什么.
Ger*_*ald 11
文件扩展名".r"实际上并不多,可能只是该作者使用的个人约定.有些人会将其私有标题命名为"new_p.h"或类似名称.
基本上,私有标头只是一个标题,只能由特定的实现文件包含,而不是由消费者包含.它与语言或编译器无关,它只是一种编码约定.
我遇到.r文件的实例是使用ANSI-C进行面向对象编程,其中一个.r文件用作类的"表示" - (如果我理解正确的话)一种通过保持信息隐藏来执行信息隐藏的方法内部表示和控制在单独的头文件中访问类的功能.
只有该类的实现才会引用该.r文件,并且在这方面它可以被视为该类的"私有头".该类外部的接口.h使用了常规头文件.
举例来说,一个类可能由三个文件组成:
Circle.h /* Header file with external interfaces, such as methods. */
Circle.r /* Representation file for internal use within the class, such as
structs that define the internal states. */
Circle.c /* Implementation of the Circle class. */
Run Code Online (Sandbox Code Playgroud)
然后,按照惯例,利用Circle该类的程序可以包括该Circle.h文件作为访问该类的接口.Circle.r由Circle类的实现严格使用而不是由其他人使用,因此,使其成为"私有标题".
该r文件的扩展名基本上是使用惯例,而不是东西是"官方"或使用的所有的时间.它用于方便起见,并与具有h文件扩展名的常规头文件区分开来.
C编译器没有为文件扩展名附加任何特定含义,因此扩展名的使用.r只是作者按照惯例指示某些内容的方式.不熟悉本书,我不知道它可能是什么,但请放心,编译器没有附加任何特定含义的文件名.