【问题标题】:Error: identifier "_S_IFDIR" is undefined错误:标识符“_S_IFDIR”未定义
【发布时间】:2011-10-23 01:13:15
【问题描述】:

我刚刚在 Visual Studio (Windows) 中打开了我的一个旧项目,添加了目录 test 并发现了编译错误。 我刚刚从我的其他工作项目中复制了该函数并添加了相同的标题。 如果你点击 F12 stats.h 被打开并且你得到了标识符但不知何故编译器看不到它?

#include <sys/types.h>
#include <sys/stat.h>

void my_function()
{
...
    struct _stat buf;        
    _wstat(dir, &buf);
    if ((buf.st_mode & _S_IFDIR) > 0) { // here _S_IFDIR undefined
        ...
    }
}

【问题讨论】:

  • 请用相关系统标记。对于 Unix,statS_IFDIR 的开头没有下划线,也没有 _wstat
  • 是的,stat.h。我在 Windows 中使用 Visual Studio。 S_IFDIR 也在 stat.h 中声明为 _S_IFDIR

标签: c windows directory


【解决方案1】:

可能_S_IFDIR 介于#if 检查之间,但事实并非如此。

//sys/stat.h
#ifdef SOMETHING  // <--- this needs to be true to activate below code
//...
#define _S_IFDIR 0
//...
#endif

【讨论】:

  • @Chesnokov,是的,所以如果您看到我的回答,我给出了相同的示例。在评论中提到了sys/stat.h;这意味着文件名。检查你的文件,看看宏是否定义在#if-#endif
  • 我明白了,我的项目中既没有宏,也没有名为 _S_IFDIR 的定义。 _S_IFDIR 在 stat.h 中处于活动状态
【解决方案2】:

由于 POSIX 符号是 S_ISDIR,而您的系统似乎主要遵循 POSIX,但添加了一个前导下划线,也许 _S_IFDIR 应该替换为 _S_ISDIR(即,将 F 替换为 S) ?

【讨论】:

  • 谢谢,这不起作用,用F12也找不到_S_ISDIR
【解决方案3】:

您可以尝试添加以下定义:

#if defined __WIN32__ || defined _WIN32 || defined _Windows
      #if !defined S_ISDIR
            #define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR)
      #endif
#endif

【讨论】:

    猜你喜欢
    • 2014-06-05
    • 2015-05-12
    • 2012-02-26
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多