有人可以举个例子来做这件事。假设静态变量范围仅限于文件。这对于该文件是私有的。就像我想知道的更多示例。换句话说,如何使用当前可用的关键字(结构,静态......等)实现隐藏C语言概念的数据
答案 0 :(得分:4)
这家伙是嵌入式系统的全球权威之一。他在c。
中写了关于OOP的白皮书答案 1 :(得分:2)
您可以使用私有标头(例如xyz_private.h
)来定义私有结构(例如struct xyz_private_t
)。在公共标题中你可以做到
typedef struct xyz_private_t *xyz_ptr_t; or
typedef struct {
... some public members ...
struct xyz_private_t *private;
} mytype_t;
这与C ++中的PIMPL类似。
私人,朋友,受保护无法区分 - 文件可以/确实访问私有标头,或者它不能/不可以。
答案 2 :(得分:1)
您必须重写/扩展编译器,向lexigraphic单元添加新语法(这可能是最简单的部分),最重要的是,添加新规范。如果你要将这些关键词添加到C语言中,你将不再拥有C语言,而是一个派生词。任何其他编译器都不会理解您的代码。此外,这些不仅仅是关键字,它们是特定的预期行为,您不能只实现关键字,您必须为该语言添加完整的OOP支持。如果这是你的计划 - 祝你好运。
数据隐藏是托管语言的一个特性,因为有一个运行时分离到你的程序处理幕后的事情,这在C中不存在。如果你想拥有这些功能(数据隐藏和其他抽象仅限于托管语言),你必须准确地生成这样的结构,即。实现运行时来处理幕后的事情。然后,只有那时,你能够实现数据隐藏和其他抽象。
C根本不提供这些可能性,程序中的任何代码都可以访问进程虚拟内存中的任何地址,绕过你正在计划的任何地方。
我的建议,即使对你来说很难:使用托管语言。 C不是实现你想要做的事情的正确语言。
答案 3 :(得分:1)
是的,内部链接(静态)有效地使文件对文件保密。但是,您不一定需要这样做。您可以通过在源文件中定义结构并仅向用户提供typedef和一组函数来模拟具有私有成员的类。除“构造函数”之外的所有函数都将采用明确的“this”参数。您的虚构造函数将简单地分配您的类型的实例并返回指针。由于所有函数都将在与结构相同的源中定义(使用外部链接),因此可以查看成员。只看到typedef和函数原型的用户不能。
在这种情况下,您可以通过让函数返回指向内部声明的实例的指针来模拟单例。
答案 4 :(得分:0)
C ++起源于C的预编译器,具有预编译器,如Glockenspiel和CFront。您可以找到您要找的内容here(它还提供来源)。
如果你没有从中获取线索,我认为在C中实现真正数据隐藏的唯一方法是将变量声明为函数的静态变量。