如何在c语言中实现公共、私有和受保护的关键字?
有人可以给我举个例子。假设静态变量的作用域仅限于文件。这是该文件的私有部分。像这样,我想知道更多的例子。换句话说,如何使用当前可用的关键字(STRUCT、STATIC…等)实现C语言中的数据隐藏概念您必须重写/扩展编译器,向lexigraphic单元添加新语法(这可能是最简单的部分),最重要的是,添加新规范。如果你将这些关键字添加到C语言中,你将不再拥有C语言,而是一个派生词。您的代码不会被任何其他编译器理解。此外,这些不仅仅是关键字,它们是特定的预期行为,您不能只实现关键字,您必须为该语言添加完整的OOP支持。如果这就是你的计划——祝你好运 数据隐藏是托管语言的一项功能,因为有一个独立于您的程序的运行时来处理幕后事务,这在C语言中是不存在的。如果您想拥有这些功能(数据隐藏和其他仅限于托管语言的抽象),您必须准确地生成这样的构造,实现一个运行时来处理幕后事务。然后,也只有这样,您才能实现数据隐藏和其他抽象 C根本不提供这些可能性,程序中的任何代码都可以访问进程虚拟内存中的任何地址,执行您计划的任何操作如何在c语言中实现公共、私有和受保护的关键字?,c,C,有人可以给我举个例子。假设静态变量的作用域仅限于文件。这是该文件的私有部分。像这样,我想知道更多的例子。换句话说,如何使用当前可用的关键字(STRUCT、STATIC…等)实现C语言中的数据隐藏概念您必须重写/扩展编译器,向lexigraphic单元添加新语法(这可能是最简单的部分),最重要的是,添加新规范。如果你将这些关键字添加到C语言中,你将不再拥有C语言,而是一个派生词。您的代码不会被任何其他编译器理解。此外,这些不仅仅是关键字,它们是特定的预期行为,您不能只实现关键字,您必须为该语言添加
我的建议是,即使这对你来说很难:为此使用一种托管语言。C语言不是实现您想要做的事情的正确语言 您必须重写/扩展编译器,向lexigraphic单元添加新语法(这可能是最简单的部分),最重要的是,添加新规范。如果你将这些关键字添加到C语言中,你将不再拥有C语言,而是一个派生词。您的代码不会被任何其他编译器理解。此外,这些不仅仅是关键字,它们是特定的预期行为,您不能只实现关键字,您必须为该语言添加完整的OOP支持。如果这就是你的计划——祝你好运 数据隐藏是托管语言的一项功能,因为有一个独立于您的程序的运行时来处理幕后事务,这在C语言中是不存在的。如果您想拥有这些功能(数据隐藏和其他仅限于托管语言的抽象),您必须准确地生成这样的构造,实现一个运行时来处理幕后事务。然后,也只有这样,您才能实现数据隐藏和其他抽象 C根本不提供这些可能性,程序中的任何代码都可以访问进程虚拟内存中的任何地址,执行您计划的任何操作 我的建议是,即使这对你来说很难:为此使用一种托管语言。C语言不是实现您想要做的事情的正确语言 是的,内部链接(静态)有效地使文件私有化。不过,你不一定需要这些。您可以通过在源文件中定义一个结构并仅向用户提供一个typedef和一组函数来模拟具有私有成员的类。除了“构造函数”之外,所有函数都将采用显式的“this”参数。您的faux构造函数只需分配类型的实例并返回指针。由于所有函数都将在与结构相同的源中定义(使用外部链接),因此它们可以看到成员。只能看到typedef和函数原型的用户不能 在这种情况下,通过让函数返回指向内部声明实例的指针,您可以使用static来模拟单例。是的,内部链接(static)有效地使文件私有化。不过,你不一定需要这些。您可以通过在源文件中定义一个结构并仅向用户提供一个typedef和一组函数来模拟具有私有成员的类。除了“构造函数”之外,所有函数都将采用显式的“this”参数。您的faux构造函数只需分配类型的实例并返回指针。由于所有函数都将在与结构相同的源中定义(使用外部链接),因此它们可以看到成员。只能看到typedef和函数原型的用户不能
在这种情况下,通过让函数返回指向内部声明实例的指针,您可以使用static来模拟单例。您可以使用私有头(比如
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相似。
无法区分private、friend和protected-文件可以/确实访问private头,或者不能/不访问private头。您可以使用private头(比如
xyz\u private.h
)定义私有结构(比如struct xyz\u private\u t
)。在公共标题中,你可以这样做
typedef struct xyz_private_t *xyz_ptr_t; or
typedef struct {
... some public members ...
struct xyz_private_t *private;
} mytype_t;
<>这与C++中的PIMPL相似。
私密、朋友、受保护无法区分-文件可以/确实访问私密头,或者它不能/不访问。这家伙是嵌入式系统的世界权威之一。他用c写了这篇关于OOP的白皮书
这家伙是世界上嵌入式系统的权威之一。他用c写了这篇关于OOP的白皮书
C++最初是作为C的预编译器,带有诸如Glockenspiel和CFront之类的预编译器。你可以找到你正在寻找的东西(它也提供来源)
如果你没有从中找到线索,我认为在C中实现真正的数据隐藏的唯一方法是将变量声明为函数的静态变量。C++最初是作为C的预编译器,带有诸如Glockenspi之类的预编译器