__USE_FILE_OFFSET64与_FILE_OFFSET_BITS = 64

vy3*_*y32 23 64-bit coding-style standards-compliance

我试图维护编译许多不同系统的代码.我已经看到了十几种不同的要求方式lseek,需要64位.有些系统使用lseek64,有些使用lseeko,有些需要你定义_FILE_OFFSET_BITS=64,现在我发现了一个需要你定义的新系统__USE_FILE_OFFSET64.

所有这些都有标准吗?

Ser*_*sov 14

在IEEE标准1003.1-2004 getconf值(和在一个较新的组IEEE标准1003.1-2008 ;也参见这些文件的实施例部分).未指定实际编译器选项(可能甚至未定义).

但是,AC_SYS_LARGEFILEautoconf中的宏不会尝试使用它 - 它只-n32针对IRIX -D_FILE_OFFSET_BITS=64(它应该适用于大多数系统)和-D_LARGE_FILES=1(显然适用于AIX).在autoconf源中还提到了对单个UNIX规范添加对任意文件大小的支持(旧的规范草案,然后部分包含在POSIX.1规范中).

至于__USE_FILE_OFFSET64手动定义,不确定这是否真的是一个正确的解决方案 - 双下划线宏是为系统头保留的,并且很可能有一些条件定义依赖于其他定义.


pus*_*rnk 9

features.h,你看之间的关系_FILE_OFFSET_BITS__USE_FILE_OFFSET64.

#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
# define __USE_FILE_OFFSET64    1
#endif
Run Code Online (Sandbox Code Playgroud)

因此,仅_FILE_OFFSET_BITS适用于用户.

  • @Kaz的`defined`试验是为了避免GCC的`-Wundef`模式,它被用来_when建设的libc itself_警告,因为glibc的具有内部配置宏的_lot_,他们希望避免错别字.因为它是libc本身的构建,所以标题不能获得gcc适用于"系统头"的警告的通常豁免. (7认同)