C fpos类型是否可以接受空值?

C fpos类型是否可以接受空值?,c,C,我知道指针可以设置为null(例如,指示所指向的对象不存在),并且没有有效的指针将指向null;是否可以对fpos\u t类型执行相同操作,以使任何有效位置都不为空?fpos\u t通常是无符号整数类型。在大多数系统上,无符号整数,无符号长整数或无符号长整数。Othern的类型与size\u t相同。因此,“有效”偏移量的解释取决于使用它的函数。如果提供了无效的偏移量,则系统调用通常会因EINVAL而失败 无效偏移量通常被称为“偏移量过大”。某些系统调用可能还需要偏移量与例如页面边界对齐 如果您

我知道指针可以设置为null(例如,指示所指向的对象不存在),并且没有有效的指针将指向null;是否可以对
fpos\u t
类型执行相同操作,以使任何有效位置都不为空?

fpos\u t
通常是无符号整数类型。在大多数系统上,
无符号整数
无符号长整数
无符号长整数
。Othern的类型与
size\u t
相同。因此,“有效”偏移量的解释取决于使用它的函数。如果提供了无效的偏移量,则系统调用通常会因
EINVAL
而失败

无效偏移量通常被称为“偏移量过大”。某些系统调用可能还需要偏移量与例如页面边界对齐

如果您希望有一个“无效”偏移量,我建议您尝试将其设置为可能的最大值,即
(fpos\u t)-1
。但是,没有一个通用的方法。

< P>这是一个C++问题而不是C问题,因为<代码> fPoSt*<代码>不是我所知的C标准的一部分。 <>在C++中,代码> fPOSITT <代码>被定义为“非数组类型,包含指定文件内每个位置的所有信息所需的信息”。见:

我相信它通常是一个结构,虽然理论上它可以是一个指针。但是,它是由实现定义的。因此,它不能(可靠且可移植)为
NULL
,并且通常会失败

在C语言中(你每天学习一件新事物),它仍然是不透明的类型。例如,见:


在GNUC库中,fpos_t是一种不透明的数据结构,它包含表示文件偏移量和转换状态信息的内部数据。在其他系统中,它可能具有不同的内部表示形式。

fpos对象的内容不打算直接读取,而只是用作调用fsetpos的参数。

我们不知道H2CO3所说的,它是一种不透明类型。更详细地说,它是未指定的,这是在章节
7.19.1
中所说的:

fpos\u t

这是一种对象类型,而不是能够记录所有信息的数组类型 需要唯一地指定文件中的每个位置

在第7.19.9.1节中,fgetpos函数表示(强调):

#包括
int fgetpos(文件*限制流,fpos_t*限制pos);
fgetpos函数存储解析状态(如果有)和文件的当前值 在由pos指向的对象中,由stream指向的流的位置指示器。 存储的值包含可由fsetpos函数用于 将流重新定位到调用fgetpos函数时的位置


我们不知道--
fpos\u t
是一种不透明类型。它可能有或可能没有这样的值。如果这是(如我所怀疑的)C++问题而不是C问题,请将标签更改为C++。或者,请指定它引用的C库。下面的答案让我怀疑自己,但我认为POSIX C库使用了
fgetpos
etc
long
not
fpos\u t
-参见下面我的答案。@H2CO3确实,标准中说它包含未指定的信息。我在C99草案中看到了
fpos\u t
,首先提到了
7.19.1
。你说得很对。我修正了我的答案,但我认为你应该为此得到赞扬。gnu libc手册页指定
long
。很明显,我应该去看标准。那是一个标准的东西还是一部分(例如)MSAPI?POSIX
ftell
etc.返回
long
not
fpos\u t
。唯一的<代码> fPOStEt <代码>我是C++。@ Abvy<代码> fPOSUT >在我的代码> STDIO。
#include <stdio.h>

int fgetpos(FILE * restrict stream, fpos_t * restrict pos);