如何确定头文件中 C 结构的成员?
How can one determine the members of a C struct in a header file?
我正在使用 minGW-W64 编译器,找不到有关 dirent.h
函数的文档,想知道 readdir
中使用的 dirent
结构中有哪些成员,如下面的代码示例。
在 minGW-W64 中,编译失败,因为 ep
结构中没有 d_type
。
我的理解是,如果事先不知道结构的所有成员,就无法打印出结构的所有成员,就像 JavaScript.
中的对象属性一样
我可以在编译器文件中查找一些方法吗?
谢谢。
int
main (void)
{
DIR *dp;
struct dirent *ep;
struct stat *info;
dp = opendir ("./SQLite3/");
if (dp != NULL)
{
while (ep = readdir (dp))
{
printf( "Name : %s, type : %s\n", ep->d_name, ep->d_type );
}
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
return 0;
}
我终于找到了。目录中有几个“include”文件夹。如果有人关心它与 GNU GCC 不同并且在下面。为什么省略d_type
,我不知道。
struct dirent
{
long d_ino; /* Always zero. */
unsigned short d_reclen; /* Always zero. */
unsigned short d_namlen; /* Length of name in d_name. */
char d_name[260]; /* [FILENAME_MAX] */ /* File name. */
};
/*
* This is an internal data structure. Good programmers will not use it
* except as an argument to one of the functions below.
*/
以编译器的方式查看头文件内容的一种方法是 gcc -E file.c > file.i
,其中 file.c
仅包含头文件的 #include
行。
这将扩展其中的所有宏并且通常会导致非常长的输出,但在这种情况下它会很好地为您服务。结构定义将在输出中。
值得庆幸的是,现在作者有足够的判断力,可以为所有自定义类型使用 typedef
而不是 #define
。情况并非总是如此,过去可读性比现在差很多。
至于d_type
没有标准化,只是Linux加的。所以我对 Windows 仿真没有它并不感到惊讶。
我正在使用 minGW-W64 编译器,找不到有关 dirent.h
函数的文档,想知道 readdir
中使用的 dirent
结构中有哪些成员,如下面的代码示例。
在 minGW-W64 中,编译失败,因为 ep
结构中没有 d_type
。
我的理解是,如果事先不知道结构的所有成员,就无法打印出结构的所有成员,就像 JavaScript.
中的对象属性一样我可以在编译器文件中查找一些方法吗?
谢谢。
int
main (void)
{
DIR *dp;
struct dirent *ep;
struct stat *info;
dp = opendir ("./SQLite3/");
if (dp != NULL)
{
while (ep = readdir (dp))
{
printf( "Name : %s, type : %s\n", ep->d_name, ep->d_type );
}
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
return 0;
}
我终于找到了。目录中有几个“include”文件夹。如果有人关心它与 GNU GCC 不同并且在下面。为什么省略d_type
,我不知道。
struct dirent
{
long d_ino; /* Always zero. */
unsigned short d_reclen; /* Always zero. */
unsigned short d_namlen; /* Length of name in d_name. */
char d_name[260]; /* [FILENAME_MAX] */ /* File name. */
};
/*
* This is an internal data structure. Good programmers will not use it
* except as an argument to one of the functions below.
*/
以编译器的方式查看头文件内容的一种方法是 gcc -E file.c > file.i
,其中 file.c
仅包含头文件的 #include
行。
这将扩展其中的所有宏并且通常会导致非常长的输出,但在这种情况下它会很好地为您服务。结构定义将在输出中。
值得庆幸的是,现在作者有足够的判断力,可以为所有自定义类型使用 typedef
而不是 #define
。情况并非总是如此,过去可读性比现在差很多。
至于d_type
没有标准化,只是Linux加的。所以我对 Windows 仿真没有它并不感到惊讶。