最近在看 APUE 时遇到了DIR
,提到了由于不同的实现,解析目录文件内容方式不统一,通常会阻止直接读取目录文件的内容
DIR *opendir (const char *name)
跳转到DIR
的定义
/* This is the data type of directory stream objects.
The actual structure is opaque to users. */
typedef struct __dirstream DIR;
__dirstream
定义找不到
注释说 DIR 结构体对用户透明,那么它是如何隐藏这个定义的呢?
源文件
#include <stdio.h>
#include <dirent.h>
int main() {
DIR* dir = opendir(".");
struct dirent *d = readdir(dir);
while (d) {
printf("%s\n", d->d_name);
d = readdir(dir);
}
return 0;
}
使用 gcc 预处理源文件
➜ test gcc -E ls.c | grep __dirstream -A2 -B2
};
# 127 "/usr/include/dirent.h" 3 4
typedef struct __dirstream DIR;
并没有找到__dirstream
的定义
所以是如何实现隐藏定义的?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.