是否存在C库中SEEK_SET、SEEK_CUR、SEEK_END值不为0、1、2的情况?
关于SEEK_SET/SEEK_CUR/SEEK_END非标准取值环境的疑问
对于fseek(POSIX标准中对应lseek)的whence参数,部分调用C库的编程语言(如gfortran、Nim)默认将SEEK_SET、SEEK_CUR、SEEK_END分别映射为0、1、2。
Python的
seek方法虽自行指定了SEEK_*的具体取值,但CPython内部会将0、1、2转换为C库对应的实际值。
查阅C语言标准和POSIX规范,二者都未规定SEEK_SET、SEEK_CUR、SEEK_END这几个宏的具体数值。
我想了解:在哪些操作系统和C编译器环境下,运行以下代码的输出不是012?
#include <stdio.h> int main(){ printf("%d%d%d\n", SEEK_SET, SEEK_CUR, SEEK_END); }
我已在多个环境中测试,输出均为012:
- Windows:gcc(mingw)、MSVC
- Debian:clang、gcc
- FreeBSD:clang
- Solaris(SunOS5):Oracle Solaris Studio C Compiler
- Android(Termux):clang
如果不存在这类输出非012的环境,那么为现有依赖固定值的实现添加修复措施的意义就不大了。
内容的提问来源于stack exchange,提问作者lit
相关产品推荐
相关产品推荐

