9

正如我们在 中看到的dirent.h,有一个 typedef:

typedef struct __dirstream DIR;

它说它对用户是不透明的。而且我们甚至在 gcc 头文件中也找不到,__dirstream结构定义只能在 glibc 源代码中找到。我想知道为什么这个结构必须是不透明的(我认为说它阻止用户直接引用是不合理的,可能我错了)?有什么问题?

4

1 回答 1

7

您可以在此处找到实际定义,但正如已经指出的那样,您不应该直接访问它。

它可以在标准库的实现(或同一库的不同版本)之间随机更改,这就是它被隐藏的原因。

您关于“通知用户”的评论有点......我不知道,这是一个非常乐观的前景。隐藏定义使得滥用它变得更加困难,这反过来又使得编写违反规范并包含毫无意义的脆弱代码的程序变得更加困难。这是一件好事; 你会发现很多软件工程致力于阻止程序员做他们不应该做的事情。

这反过来不一定是因为“所有程序员都是愚蠢的”,至少这不是我的解释,而是因为典型软件系统的复杂性非常非常高,尽可能减少它是有益的。信息隐藏是降低系统特定位置复杂性的一种方法。

于 2013-06-03T09:49:52.507 回答