当前位置:  开发笔记 > 程序员 > 正文

在C中隐藏结构定义是一个好习惯吗?

如何解决《在C中隐藏结构定义是一个好习惯吗?》经验,为你挑选了0个好方法。

我认为隐藏结构定义会使代码更安全,因为您在编译器的帮助下强制执行,不能直接访问结构的任何成员.缺点是用户无法在堆栈上声明结构类型的变量,因为结构的大小未知,有时需要避免使用malloc().这可以(部分成功)解决,alloca(3)所有主要的libc实现都存在,尽管此函数不符合POSIX.鉴于这种优点和缺点,这样的设计一般可以认为好吗?

lib.h:

struct foo;
extern size_t foo_size;
int foo_get_bar (struct foo *);

lib.c:

struct foo {
  int bar;
};

size_t foo_size = sizeof foo;

int foo_get_bar (struct foo *foo)
{
  return foo->bar;
}

example.c:

#include "lib.h"

int bar(void) {
  struct foo *foo = alloca (foo_size);
  foo_init (foo);
  return foo_get_bar (foo);
}

UPD:更新了问题,明确指出使用的思想alloca()是能够在堆栈上声明结构但隐藏其定义.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有