gpt4 book ai didi

C 封装使用 const 指针指向 const 数据

转载 作者:太空狗 更新时间:2023-10-29 15:33:25 25 4
gpt4 key购买 nike

我有一个关于在 C 中封装我的模块(.c/.h 文件对)的问题。

人们通常使用诸如 getTime(char * time) 之类的访问函数来访问模块的内部变量,而不提供对它们进行干扰的能力。

现在,我正在使用指向常量数据的常量指针,指向内部结构来做同样的事情。我认为这很有效,因为其他模块可以查看结构中的数据而不能更改它,并且它节省了函数调用的开销。 (这是针对嵌入式的东西,所以函数调用是“昂贵的”)。

我只是想要一些关于这是否是有效封装等的意见。我想他们可以设置一个指向它的指针,该指针不是常量然后他们可能会弄乱数据?一个例子:等等

typedef struct {
unsigned char data;
unsigned int intdata;
} myStruct;

extern const myStruct * const ptrConstMyStruct;

blah.c

static myStruct thisIsMyModulesData;
const myStruct * const ptrConstMyStruct = &thisIsMyModulesData;

另一个文件.c

variable = ptrConstMyStruct->data;
ptrConstMyStruct->data = variable; //compile error!

最佳答案

使用不完整的类型并直接在头文件中声明结构是首选方法。

就封装而言,常量性更像是一种声明特定函数不会改变给定对象的方法。在您的解决方案中,您将不得不放弃似乎违反直觉的常量。还是您从来不使用 const 指针作为变异函数的参数?

此外,封装是关于隐藏实现和细节,如果您暴露作为实现的结构,则无法做到这一点。

编辑以解释前向声明:

MyCode.h:

struct my_struct;

MyCode.c:

struct my_struct { .... };

以上意味着 MyCode 的用户将能够使用指向 my_struct 的指针,但不能检查其成员。

关于C 封装使用 const 指针指向 const 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10605167/

25 4 0
文章推荐: c - GDB:观察给定范围内的变量
文章推荐: jQuery
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com