opaque-pointers相关内容

可在 C 中的堆栈上分配的不透明类型

在设计 C 接口时,通常只让用户程序知道的内容进入公共接口 (.h). 因此,例如,如果用户程序不需要知道结构的内部组件,则它们应该保持隐藏.这确实是一种很好的做法,因为结构的内容和行为将来可能会发生变化,而不会影响界面. 实现该目标的一个好方法是使用不完整类型. typedef struct foo opaqueType; 现在可以构建一个只使用指向 opaqueType ..
发布时间:2022-01-22 12:23:17 其他开发

什么是 C 中的不透明指针?

我可以知道 C 中不透明指针概念背后的用法和逻辑吗? 解决方案 不透明指针是一种不显示底层数据细节的指针(来自字典定义:opaque:形容词;无法看到通过;不透明). 例如,您可以在头文件中声明(这是我的一些实际代码): typedef struct pmpi_s *pmpi; 它声明了一个类型pmpi,它是一个指向不透明结构struct pmpi_s的指针,因此任何你声明为pm ..
发布时间:2021-12-13 12:48:24 其他开发

C 结构体信息隐藏(不透明指针)

我目前对 C 结构的信息隐藏概念有些困惑. 这个问题的背景是一个嵌入式 c 项目,对 OOP 的了解几乎为零. 到目前为止,我总是在相应模块的头文件中声明我的 typedef 结构.所以每个想要使用这个结构体的模块都知道结构体类型. 但经过 MISRA-C 检查后,我发现了中等严重性警告:MISRAC2012-Dir-4.8- 结构的实现不必要地暴露给翻译单元. 经过一番研 ..
发布时间:2021-08-31 19:14:48 其他开发

c typedef(ed) 不透明指针

我已经定义了一个不透明的结构和相关的 API,如下所示: typedef struct foo foo;foo *create_foo(...);delete_foo(foo *f); 我无法在我的 c 文件中定义结构.给出重新定义错误. typedef struct foo {int 实现;}foo; 我可以在没有 typedef 的情况下在 c 文件中使用 foo 但我想要 typed ..
发布时间:2021-08-31 19:07:21 其他开发

术语“不透明类型”是什么?表示“CFBundleRef opaque type”的上下文?

有人对“不透明类型”有什么好的解释吗?我在 CFBundleRef 的上下文中看到了这个术语,他们在这里说:“CFBundleRef opaque type”。这是一种只读的类型吗? 解决方案 “opaque类型”是一种你没有完整定义的类型 struct 或 class 。在C,C ++和Objective-C中,您可以告诉编译器稍后将使用前向声明定义类型: //在C,C ++和O ..
发布时间:2018-10-31 20:12:05 移动开发

在Objective C ++中使用不透明指针时遇到麻烦

此问题的答案解释了不透明的指针是在Objective C ++标头中包含C ++成员变量的好方法。我试图按照这个例子时遇到编译错误。这是我标题中的相关代码,相应的编译器错误显示为注释: struct ADSR_opaque; //错误:'struct ADSR_opaque'的前向声明 @interface LoopyPulser:NSObject { float _pulse ..
发布时间:2018-10-31 12:15:44 移动开发

如何创建在MISRAC模块:2012跟随风向4.12和4.8?

这个问题涉及到编码ISO C99的MISRAC如下:2012指南 我要寻找指导目录4.8结合迪尔4.12“如果一个指向结构或联合从来都不是一个翻译单元内的间接引用,那么对象的实现应该被隐藏”,“动态内存分配不得拿来主义“。 当用C实现一个抽象数据类型,通常使用的句柄是指向一个结构描述ADT的内部状态来指ADT。这可以用一个不透明的指针按目录4.8与内部细节保持对用户隐藏的利益来完成。 一般来 ..
发布时间:2016-08-23 11:34:25 C/C++

具有多个定义不透明的结构

我正在考虑实现在C语言中一个简单的界面模式。 一个关键特征是,它会提供多个定义为通过接口的公共头供给的不透明内在张力结构,​​也就是,不同的实现将为该结构(因此在不同的转换单元提供不同的垫层数据,相同的结构将具有不同的实现)。 我找不到任何引用是否这将是一个好或坏的设计模式。至少它似乎并不违反严格别名规则,只有依靠一致的顺序和填充为共同的第一个元素(S),它是由C标准保证的(据我看到的)。当然 ..
发布时间:2016-08-23 10:42:46 C/C++

是TYPE *为unsigned char型铸造*允许吗?

C99 - 特别6.2.6.1节,第4段 - 指出,复制对象重新presentation成unsigned char型数组是允许的: 结构{ INT富; 双条; }巴兹; unsigned char型字节[sizeof的巴兹]//做事与巴兹结构。的memcpy(字节,&安培;巴兹,sizeof的字节);//做事情的字节数组。 我的问题:我们能不能​​避免额外的内存分配,并通过 ..
发布时间:2016-08-22 16:56:49 C/C++

不透明的类型可分配在C堆栈

在设计C接口,它是常见的让到公共接口( .H ),需要由用户程序只知道是什么。 因此​​,例如,结构的内部部件应保持如果用户程序不需要知道它们隐藏。这的确是很好的做法,因为结构可能会在未来改变的内容和行为,而不影响接口。 一个伟大的方式来实现这一目标是使用不完全类型。 typedef结构美孚opaqueType; 现在只用指针 opaqueType 的接口可以建立,而用户程序永远需要知 ..
发布时间:2016-08-18 22:56:22 C/C++

我是正确的假设一个人不能向前声明库的不透明的指针类型?

有很多问题在那里大约向前声明和不透明的类型,但大多数似乎是从库作者的角度,还是人们试图使用不完全类型没有指针或一些这样的。 我使用的接口接受/返回 FOO * 指针库。我想证实,我不能(或不应该)在某种程度上前瞻性声明中的 FOO 或 FOO * 我的头文件(其中定义了 FOO * 成员的结构)。 我知道我可以只的#include< library.h> 在我的头和我的.c文件两者 ..
发布时间:2016-08-18 13:41:47 C/C++

不透明数据类型的静态分配

很多时候的malloc()编程的嵌入式系统时是绝对不允许的。大部分时间我pretty能够解决这个问题,但有一件事让我恼火:它让我使用所谓的“不透明类型”,以使数据隐藏。通常,我会做这样的事情: //在module.h中的文件 typedef结构为handle_t为handle_t;为handle_t * create_handle(); 无效operation_on_handle(为handl ..
发布时间:2016-08-18 12:54:56 C/C++

不透明的C结构:应如何声明?

我见过两个下列两种风格用C API的声明不透明类型。是否有任何明显的优势,使用一种风格比其他? 选项1 // foo.h中 typedef结构美孚* fooRef; 无效doStuff(fooRef F);// foo.c的 结构foo的{ INT X; 诠释Ÿ; }; 选项2 // foo.h中 typedef结构_foo富; 无效doStuff(富* F);// f ..
发布时间:2016-08-17 22:44:55 C/C++