小编Evo*_*402的帖子

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

我目前对 C 结构信息隐藏的概念有点困惑。

这道题的背景是一个嵌入式c项目,对OOP的了解几乎为零。

到目前为止,我总是在相应模块的头文件中声明我的 typedef 结构。因此每个想要使用该结构的模块都知道该结构类型。

但经过 MISRA-C 检查后,我发现了中等严重性警告:MISRAC2012-Dir-4.8 - 结构的实现不必要地暴露给翻译单元。

经过一番研究后,我通过限制结构成员对私有范围的可见访问,发现了 C 结构信息隐藏的概念。

我立即尝试了一个简单的例子,如下所示:

struct_test.h

//struct _structName;

typedef struct _structName structType_t;
Run Code Online (Sandbox Code Playgroud)

struct_test.c

#include "struct_test.h"

typedef struct _structName
{
    int varA;
    int varB;
    char varC;
}structType_t;
Run Code Online (Sandbox Code Playgroud)

主程序

#include "struct_test.h"

structType_t myTest;

myTest.varA = 0;
myTest.varB = 1;
myTest.varC = 'c';
Run Code Online (Sandbox Code Playgroud)

这会产生编译器错误,即对于 main.c,myTest 的大小未知。当然是这样,main.c 只知道 structType_t 类型的结构存在,而没有其他信息。

所以我继续研究并偶然发现了不透明指针的概念。

所以我尝试了第二次尝试:

struct_test.h

typedef struct _structName *myStruct_t;
Run Code Online (Sandbox Code Playgroud)

struct_test.c

#include "struct_test.h"

typedef struct _structName
{
    int varA;
    int varB;
    char varC;
}structType_t;
Run Code Online (Sandbox Code Playgroud)

主程序

#include …
Run Code Online (Sandbox Code Playgroud)

c struct information-hiding misra opaque-pointers

3
推荐指数
1
解决办法
2531
查看次数

标签 统计

c ×1

information-hiding ×1

misra ×1

opaque-pointers ×1

struct ×1