相关疑难解决方法(0)

我是否施放了malloc的结果?

这个问题,有人建议意见,我应该不会投的结果malloc,即

int *sieve = malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

而不是:

int *sieve = (int *) malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?

c malloc casting

2318
推荐指数
27
解决办法
22万
查看次数

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

我可以知道C中不透明指针概念背后的用法和逻辑吗?

c pointers

58
推荐指数
2
解决办法
3万
查看次数

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
查看次数