当前位置: 首页 > 知识库问答 >
问题:

为什么sys/stat.h不能用-std=c1x定义ino_t?

史承福
2023-03-14
#include <sys/stat.h>
ino_t inode;

根据POSIX.1-2008,头文件 定义了 ino_t 1:

头应定义 blkcnt_tblksize_tdev_tino_tmode_tnlink_tuid_tgid_toff_ttime_t类型,如 中所述。

当我试图在Linux系统上编译文件test.c中的上面的源代码时,就会发生这种情况:

$ cat test.c
#include <sys/stat.h>
ino_t inode;
$ uname -srm
Linux 3.8.0-26-generic x86_64
$ lsb_release -d
Description:    Ubuntu 13.04
$ gcc -c test.c
$ gcc -std=c90 test.c
test.c:2:1: error: unknown type name 'ino_t'
$ gcc -std=c99 test.c     
test.c:2:1: error: unknown type name 'ino_t'
$ gcc -std=c1x test.c
test.c:2:1: error: unknown type name 'ino_t'

当我指定任何-std选项时,为什么ino_t的定义不是revelead?

共有1个答案

仲孙小云
2023-03-14

我的fstat手册页面说还包括sys/types.h,这为我解决了这个问题。sys/stat.hino_t的定义由功能宏__use_xopen__use_xopen2k保护。sys/types.h中的定义不受这种保护。

手册页面还提到包含unistd.h,但这并不是解决问题所必需的。

根据feature_test_macros的手册页:

我猜这意味着任何XOPEN功能也被关闭了。然而,我找不到任何关于这一点的描述。

附注。看来R.(见下文)感觉这在feature_test_macros的手册页中也有描述,但我有限的大脑无法找到确切的措词,所以我想把它留给读者做一个练习。如果它被描述在任何地方,那么我会期待它在手册页确实。

当心这个答案的要旨是这样的:

 类似资料:
  • https://godbolt.org/z/P97MaK 我玩的概念和预期d::is_equality_comparable工作矢量,但它没有。 编译错误在 内部失败,而不是在受概念保护的函数边界处失败。 这是错误还是预期行为?

  • 问题内容: 我在linux中有一个应用程序,该应用程序已成功编译。我想在Windows中运行相同的程序。 但是编译会产生以下与头文件有关的错误。 找不到sys / select.h 找不到termios.h 我怎样才能解决这个问题? 问题答案: Windows API在结构上和风格上与任何Unix风格提供的系统调用和库例程的组合都非常不同。 期限 Windows使用与任何* nix系统完全不同的模

  • 在过去的几个月里,我一直在学习C语言并使用终端。我的代码使用g和c11编译并运行得很好,但在过去几天里它开始出现错误,此后我在编译时遇到了问题。我唯一可以编译和运行的程序依赖于旧的C标准。 我第一次遇到的错误包括 尝试使用ecg$g-o stoi_试验stoi_试验编译。cpp-std=c 11 大堆cpp:13:22:错误:命名空间“std”中没有名为“stoi”的成员;你是说“阿托伊”吗?in

  • 我是生锈新手,一直在浏览源代码,发现了这个: 这个函数定义这样的内部函数有什么原因吗?为什么不直接写:

  • 我遇到了一个有趣的问题,我不明白发生了什么: 据我所知,我提供的单个整数参数可以解释为使用参数调用构造函数,也可以解释为使用初始化列表的构造函数。似乎只有当我提供左值时才调用initialiser_list构造函数,但当我提供r-value(至少是文字)时,构造函数。为什么会这样? 这也意味着: 结果仅为大小为1的向量; 结果是一个大小为num\u元素的向量,但我认为应该避免这种初始化,因为偶尔会