C语言结构体成员私有化

之前做嵌入式车载项目的时候,看到过udev的代码,其中有结构体私有化的方法。

今天做cableModel项目的时候,编译openssl遇到个问题:

error: dereferencing pointer to incomplete type 'X509' {aka 'struct x509_st'}

当时没有意识到openssl已经将结构体X509的实现屏蔽掉,也就是结构体私有化;于是我看了很多博客上面说的都是struct没有定义。

其实不是struct的变量未定义,而是openssl的X509结构体被类似于C++的封装,私有化了。让我们无法直接访问其成员:

x509->cert_info->validity->notAfter

而访问notAfter成员的方法已经被封装成:

X509_get0_notAfter(x509)

即使我在代码中加上typedef struct x509_st X509也不能访问X509.h中的 struct x509_st。因为整个结构体的实现是在 对应的c文件中实现的x509.c。

参考百度文库

C语言结构体变量私有化 - 百度文库 (baidu.com)中的方法,我们可以在以后的C代码中也实现成员变量的“私有化”。原理很简单:

1.h头文件中声明你想构造的结构体:

struct sample;

2.c文件中实现结构体定义:

struct sample{

        int aid;

        ...

}

3.为了访问samle的变量aid,则在.h中加入int getAid(const struct sample* t);函数声明作为你引入.h文件的接口;

4.c文件实现

int getAid(const struct sample* t)

{

        return t->aid;

}

这样我们的结构体变量就被“私有化”了。

不明所以的人可能就会像我刚才一样,掉坑。此坑我已见过两次,udev与openssl。在此标记。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值