正如我们在dirent.h
中看到的,有一个typedef:
typedef struct __dirstream DIR;
它说它对用户来说是不透明的。即使在gcc头文件中也找不到它,__dirstream
结构定义只能在glibc源代码中找到。我想知道为什么这个结构必须是不透明的(我不认为它可以说它阻止用户直接引用,可能我错了)?有什么收获?
答案 0 :(得分:4)
您可以找到实际定义here,但正如已经指出的那样,您不应该直接访问它。
它可以在标准库的实现(或同一个库的不同版本)之间随机更改,这就是它被隐藏的原因。
关于“告知用户”的评论是否有点......我不知道,这是一个非常乐观的前景。隐藏定义会使滥用它变得更加困难,这反过来会使编写违反规范的程序变得更加困难并且包含无意义的脆弱代码。那是一件好事;你会发现许多软件工程都致力于阻止程序员做他们不应该做的事情。
这反过来不一定是因为“所有程序员都是愚蠢的”,至少这不是我的解释,而是因为典型软件系统的复杂性非常非常高,所以尽可能减少它是有益的。信息隐藏是降低系统中某个特定位置复杂性的一种方法。