如何确定头文件中 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 仿真没有它并不感到惊讶。