惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志
博客园 - 司徒正美
月光博客
月光博客
宝玉的分享
宝玉的分享
Recent Announcements
Recent Announcements
小众软件
小众软件
H
Hackread – Cybersecurity News, Data Breaches, AI and More
美团技术团队
博客园 - 三生石上(FineUI控件)
A
About on SuperTechFans
J
Java Code Geeks
云风的 BLOG
云风的 BLOG
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
IT之家
IT之家
Vercel News
Vercel News
量子位
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
腾讯CDC
有赞技术团队
有赞技术团队

C++

小孩马上高一,但是想学信奥赛 c++,有什么学 c++的书推荐? 真是意想不到的操作:有好几个人一起协作向 C++库 fmtlib 加上了 C11 包装接口,确实能用 基于 C++20 协程编写 gRPC 客户端与服务端 请教各位 centos 7.9 通过 devtoolset 启用 c++14/17 时遇到的链接问题 求大佬指点:Windows 上 c++部署最新 Paddleocr,无法通过内存识字 为 c++ 提供模式匹配 分享一下我个人开源的 C++23 协程网络框架 为什么写 C++的人年龄偏大? 大型 c++项目,在 ai 帮助下完成 Linux 平台移植,可行性多大? 少用 auto 再一次感觉到 C++的恶心 分布式存储 [求助] Linux 有什么好的引入 c++ 第三方库的方案 [求助]请教一个 C++多线程的性能问题 2026 年找 C++的开发工作,应该学习 C++的哪个版本? 分布式系统 使用匿名结构体指针作为常量来杜绝魔数,是否合理/值得? 有没有什么工具可以统计 C++项目里标识符的使用情况? 看到一些 C++ 或者 C#项目 驼峰和下划线一块用,为啥泥? [求助] Linux 系统下动态库卸载后全局变量未重置的问题 交叉编译 asop android adb 最新版的问题 [有偿] 小白, Windows UI Automation TextPattern 检测问题求助 小白问个 vcpkg 相关的问题 记录一次踩坑过程(clion + cmake + vcpkg) 用智能指针管理 ffmpeg 中的数据结构是有必要的吗? 定位重载的插件或者 IDE 想系统的学习 Modern C++,麻烦大佬们推荐一些书籍 困扰几天的问题,这是被 gcc 优化了吗? 好的 c++代码是什么样的 为什么 C/C++ 语言的标准库不做成 Java 那样可安装的运行时?
似乎在 C 的领域,让一个新程序“为未来准备好”是一件很麻烦的事
jim9606 · 2026-04-09 · via C++

最近在修改一个 C 的开源小项目。因为是想在 Win 下用的,但项目是用 autoconf 构建的,所以准备了 MSYS2 UCRT64 环境来开发。然后就踩了处理不了大于 2G 文件的坑(用了 fstat)。虽然说就是一个 _FILE_OFFSET_BITS 宏的事,但毕竟是个跨平台项目,所以就查了下主流系统下这个问题的支持情况,感觉好多槽点。

  1. MSYS MinGW-w64 默认提供 32 位 off_t ,哪怕你在编译 64 位程序,想用需要上面的宏,但这并不是 POSIX 标准化的东西
  2. autoconf 有一个 AC_SYS_LARGEFILE 可以自动判断是否需要定义宏,但 autoscan 没提示需要这个
  3. 如果是 32 位 target ,似乎默认提供 32 位 off_t 是天经地义的
  4. 不想跟环境打哑谜的可以用明确 64 位的方法,例如 fseeko64 fstat64 ,但这玩意并不普遍可用,还是要构建系统检测。 例如老版本 android 就不支持。bionic 的文档说一大堆考量,结果就是想解决你得用较新的 ndk ,放弃支持旧版 android ,或者就放弃支持 32 位 abi 。(所以实际上哪怕是 arm64-v8a 的 android 系统依然有机会在处理大文件时出问题)
  5. 哪怕你不关心文件大小也可能被影响,例如查个文件创建日期就要用到 fstat ,尽管觉得做的事跟大小无关但就是有影响
  6. 如果在 abi 边界用了这些带 off_t 的变量/struct ,显然会出现 abi 不兼容问题,你也不知道一个第三方库可能用哪种配置

个人觉得 2GB 以上大文件并不是什么很罕见的用例,为什么开发环境就不能默认支持这些情况呢,难道还影响兼容性?

标题里的“为未来准备好”是指,只使用跨平台的 C/C++,加上 2000 年后的 POSIX:

  1. 已解决 2038 问题
  2. 除非明确要求,否则文本存储和 IO 都是 UTF-8 且不使用 wchar_t
  3. 无论环境如何都能正确在 ui 或控制台输出非 ASCII 字符
  4. 不拒绝使用 IPv6
  5. 支持长路径
  6. 保持对近十年出厂的系统和硬件的支持

似乎要在无第三方依赖的情况下做到这个是很困难的事?