使用c99

时间:2016-11-08 20:30:33

标签: c c99 large-files

我试图将一些代码从Windows移植到Linux,但我在支持大文件方面遇到了困难。 off_t似乎是在使用-std = c89运行gcc但不是-std = c99运行时定义的。即使是一个微不足道的测试用例也无法编译:

#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#define _FILE_OFFSET_BITS 64
#include <stdio.h>

int main()
{
    off_t x = 0;
    return 0;
}

看起来这应该很难(事实上,并非所有其他操作系统都没有)。任何人都知道发生了什么事?

1 个答案:

答案 0 :(得分:2)

类型off_t未由ISO C定义;它由POSIX定义。

我得到了

error: unknown type name ‘off_t’

如果我使用-std=c90-std=c99-std=c11进行编译。这是预期的,因为这些选项指定了与相关C标准的一致性。由于您编译的C代码不符合任何C标准,因此您不应该使用这些选项。

如果我使用off_t-std=gnu90-std=gnu99进行编译,我发现-std=gnu11已定义。

此外,off_tlseek函数的返回类型,我的系统上的手册页说它需要:

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

你应该添加它们。