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手动定义,不确定这是否真的是一个正确的解决方案 - 双下划线宏是为系统头保留的,并且很可能有一些条件定义依赖于其他定义.
在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适用于用户.