gpt4 book ai didi

c - S_IFMT 和 S_IFREG 未定义为 -std=c11 或 -std=gnu11

转载 作者:太空狗 更新时间:2023-10-29 14:54:52 24 4
gpt4 key购买 nike

这是我第一次使用 posix;我包括:

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

我有这个片段。

stat(pathname, &sb);
if ((sb.st_mode & S_IFMT) == S_IFREG) {
/* Handle regular file */
}

但是,如果我使用 -std=c99 或 -std=c11 或 -std=gnu99 或 -std=gnu11 进行编译,则在 Gentoo 上使用 GCC 4.8.3 时出现此错误:

error: ‘S_ISFMT’ undeclared (first use in this function)

如果我省略 -std=* 我没有错误。但我也想要 -std=c99 的所有功能(比如关键字 restrict 或 for(int i;;) 等......)我如何编译我的代码?

最佳答案

现代 POSIX 兼容系统需要提供 S_IFMTS_IFREG 值。 POSIX 唯一不需要(事实上,禁止这样做)的版本是 POSIX.1-1990,它似乎是您机器上的标准。

无论如何,每个符合 POSIX 的系统都提供 macros允许您检查文件的类型。这些宏相当于屏蔽方法。

所以在你的情况下,不要写(sb.st_mode & S_IFMT) == S_IFREG,而是写S_ISREG(sb.st_mode)

关于c - S_IFMT 和 S_IFREG 未定义为 -std=c11 或 -std=gnu11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28547271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com