翻译《有关编程、重构及其他的终极问题?》——21.正确的检查文件的结尾符(EOF)

AI编程工具实战对比:OpenAI Codex与Claude Code如何重塑开发工作流 在软件工程领域,代码自动生成与智能辅助正从概念走向大规模工程实践。其核心原理是基于海量代码库训练的大语言模型,能够理解自然语言意图并生成、补全或重构代码。这项技术的价值在于显著提升开发效率,降低重复性编码负担,使开发者能更专注于架构设计与复杂问题求解。当前,AI编程助手已广泛应用于快速原型开发、代码解释、跨语言翻译、自动化测试生成及代码审查等场景。随着OpenAI Codex与Anthropic Claude Code等主流模型展开激烈竞争,开发者面临关键选型:前者在**代码生成流畅度**和**生态整合** 阅读详情

翻译《有关编程、重构及其他的终极问题?》——21.正确的检查文件的结尾符(EOF)

标签(空格分隔): 翻译 技术 C/C++
作者:Andrey Karpov
翻译者:顾笑群 - Rafael Gu
最后更新:2017年03月01日


21.正确的检查文件的结尾符(EOF)

让我们继续文件处理的话题,深入了解一下EOF。但这次我们会说说关于完全不同类型造成的bug,这通常会在部本地化版本的软件中发现。

下面这段代码来自Computational Network Toolkit。PVS-Studio诊断的错误说明为:V739 EOF should not be compared with a value of the ‘char’ type. The ‘c’ should be of the ‘int’ type(译者注:大意是EOF不能和char类型的值比较,应该和int类型比较)。

string fgetstring(FILE* f)
{
  string res;
  for (;;)
  {
    char c = (char) fgetc(f);
    if (c == EOF)
      RuntimeError("error reading .... 0: %s", strerror(errno));
    if (c == 0)
      break;
    res.push_back(c);
  }
  return res;
}

解释
让我们看看EOF是如何被声明的:

#define EOF (-1)

如你所见,EOF只不过是一个值为-1的整型。fgetc()函数返回一个整型的值,也就是说,它可以返回值为0到255(或-1)的数字。在上面的代码中这个值被转换为char类型,因此值为0xFF(255)就转为值为-1了(译者注:如果不明白,回去复习基础的二进制表达正数、负数的基本知识),所以-1也就作为了文件的结尾符进行处理(EOF)。

如果用户使用了扩展的ASCII码,当程序没有正确处理字母表中某一个符号时,也就会有遇到一个错误。

比如Windows 1251 code页,在俄文字母表中的最后一个字母值就是0xFF,因此,就被程序解释为文件的结尾符号。

正确的代码

for (;;)
{
  int c = fgetc(f);
  if (c == EOF)
    RuntimeError("error reading .... 0: %s", strerror(errno));
  if (c == 0)
    break;
  res.push_back(static_cast<char>(c));
}

建议
其实我这里没有特别的建议,至于谈到EOF,我只是想展示一个比较有趣的错误的变化,因为部分人可能从来没有意识到。

记住,如果函数返回的是整型类型,不要马上把它转换为char类型,请停下来并确认相关代码都没有问题。顺便说一下,我们其实已经谈到过类似的问题,即在第二篇中讨论的memcmp()函数——“比0大的并不意味着就只是1”(其中的代码涉及到了MySQL)

CARLA中文文档重构:面向自动驾驶开发者的实战指南 CARLA模拟器是自动驾驶算法研发与教学的核心仿真平台,其PythonAPI、TrafficManager调度机制、传感器数据流及多车协同仿真构成技术基础。然而官方英文文档存在术语歧义、操作路径断裂、错误排查缺失等典型痛点,导致国内开发者在环境搭建、API调用、红绿灯策略适配及ARM64部署等环节频繁受阻。本文基于CARLA 0.9.15 LTS稳定版,以‘用户任务路径’重构文档体系,深度融合TrafficManager行为逻辑与PythonAPI实操模式,覆盖GPU驱动-CUDA内核三重校验、零拷贝图像处 阅读详情

相关推荐

OpenCode Skills:可复用、可授权、可审计的AI编程能力单元

在AI原生开发范式下,Skills并非传统插件,而是将开发最佳实践封装为机器可读、上下文感知、权限可控的行为契约。其核心原理基于结构化元数据(SKILL.md)、声明式权限模型(permission字段)与懒加载执行机制,技术价值在于实现人机协作中的确定性、安全性和可审计性。典型应用场景包括CI/CD自动化、API契约验证、微服务部署编排及跨团队知识沉淀。本文深入解析Skills如何通过YAML前言定义运行时契约、Markdown主体构建AI可执行剧本,并依托opencode.json实现企业级权限治理。

过客阵营 -- 简单的就要最简单 413

翻译《有关编程、重构及其他的终极问题?》——20.光对文件做EOF检查可能还不够

对于文件流的读,光使用eof方面的函数做检查还不够,因为流中可能会发生错误。在Java/C#等语言中可以使用try...catch机制,但对于C/C++能,除了bad()和fail()等方法外,还有bool()操作符。

老顾的记录 528

Mac 安装 Codex CLI 全指南:本地 AI 编程助手实战配置

Codex CLI 是 OpenAI 官方推出的命令行编程助手,本质是轻量级本地 AI 代码代理工具,通过标准 OpenAI 兼容 API 协议与后端模型服务通信。其核心原理在于将终端指令、文件上下文序列化为 chat completion 请求,交由本地或远程大模型处理,再以 diff/patch/解释等形式反馈结果。技术价值体现在零 GUI 依赖、低延迟响应、完全离线可控,尤其适配 Apple Silicon(M1/M2/M3)和 Intel Mac 的统一开发流。典型应用场景包括 Shell/Pyth

weixin_34032792的博客 560

翻译《有关编程、重构及其他的终极问题?》——9.使用'-0'符号作为结尾标记

这个覆盖大部分语言,避免使用在所有情况中使用0,这样就能让代码更容易理解,并且更容易发现错误。下面是一些技巧: - 0 - 只使用在需要整型值0的情况; - nullptr - 作为C++的null指针; - NULL - 作为C的null指针; - `\0`,L`\0`,_T`\0` - 作为字符串结尾符; - 0.0,0.0f - 作为浮点值的0; - false,FALSE - 作为false;

老顾的记录 668

YOLO26算法心电图十二导联目标检测+训练好的模型+368张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[导联I(I), 导联II(II), 导联III(III), 胸导联V1(V1), 胸导联V2(V2), 胸导联V3(V3), 胸导联V4(V4), 胸导联V5(V5), 胸导联V6(V6), 加压肢体导联aVF(aVF), 加压肢体导联aVL(aVL), 加压肢体导联aVR(aVR)] · 训练集:313 张 · 验证集:37 张 · 测试集:18 张 · 总计:368 张 该数据集聚焦于临床心电图信号的精准识别与定位,其核心检测目标为标准12导联心电图中的各个独立导联波形区域,涵盖肢体导联(I、II、III)与加压肢体导联(aVR、aVL、aVF),以及胸前导联(V1至V6),适用于心电图自动分析系统中对各导联位置的快速准确标注与分类。数据采集场景真实还原了医院心电图室或急诊监护环境下的标准心电图记录纸,波形清晰、基线稳定,具有高度临床参考价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 57 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9708** mAP50-95 | 0.6344 Precision | 0.8990 Recall | 0.9191 train/box_loss | 1.2231 train/cls_loss | 0.9703 val/box_loss | 1.2779 val/cls_loss | 0.... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

别再手动查日志了!用Dify+Zabbix打造你的专属运维“嘴替”(保姆级配置流程)

本文详细介绍了如何利用Dify平台与Zabbix监控系统集成,构建智能运维对话系统,实现自然语言交互的运维管理。通过保姆级配置流程,帮助运维工程师提升查询效率、降低学习成本,打造企业级智能运维解决方案。

weixin_27298377的博客 456

电子书《有关编程、重构及其他的终极问题?》的翻译

一天,一位我并不认识的俄罗斯姑娘联系我,问我是否愿意把一些有关编程的文章编程成中文,并且在中国推广,我说先看看大概是什么文章再说,她就给我发了一个链接,我发现是一些C/C++等语言如何避免bug,如何高效编程的系统整理后的长文,就觉得每周翻译一些的这样的英文编程文章也还不错,就同意了。她问我翻译的酬劳是多少,我说随他们给——其实我的态度是:每个周末休息时翻译些有趣的技术文章也应该不错,有酬劳更好,没有也没有关系。

老顾的记录 1207

文献阅读:SAR像素偏移的性能改进An Improvement of the Performance of SAR Offset Tracking Approach

像素偏移追踪POT文献阅读

weixin_56301271的博客 342

从GLM-5.2重构千个应用看AI系统级编程与Node.js/Python现代化实践

在软件工程领域,系统重构是指在保持软件外部行为不变的前提下,改善其内部结构的过程,这涉及对代码架构、模块依赖和交互逻辑的深度理解。其核心原理在于通过静态分析、依赖管理和模式识别,解决技术债并提升系统的可维护性与安全性。这一技术的价值在于能够规模化处理遗留系统的现代化问题,降低长期维护成本。其典型应用场景包括操作系统应用生态适配、多语言代码库升级以及跨平台兼容性修复。近期,GLM-5.2大模型在B站AI创造公开赛中展示的**系统级重构**能力,正是这一理念的集中体现。它并非简单的代码翻译,而是通过分析如Nod

cuiji1279的博客 422

NVIDIA驱动版本太低?手把手教你解决CUDA与PyTorch版本冲突问题

本文针对深度学习开发中常见的NVIDIA驱动版本过低导致的CUDA与PyTorch版本冲突问题,提供了从根源理解到实战解决的完整指南。文章详细解析了驱动、CUDA与PyTorch的依赖关系,并给出了升级驱动、降级PyTorch、使用Conda环境管理及Docker容器化四种核心解决方案,帮助开发者快速诊断并构建稳定的GPU开发工作流。

grpc6streamer的博客 968

机器人C++开源库The Robotics Library (RL)使用手册(三)

进入VS工程,我们先看看这些功能函数及其依赖库的分布关系:rl命名空间下,主要有八大模块。搞定VS后将逐个拆解。

qq_34839823的博客 1736

AI编程助手的现状、挑战与最佳实践

AI编程助手如Copilot、ChatGPT等正在改变软件开发流程,通过代码补全和自然语言交互提升开发效率。这些工具基于大规模代码训练,能够理解编程语言模式和常见任务,但其生成的代码可能存在隐藏缺陷或法律风险。在实际工程中,开发者需要建立AI代码审查流程,结合人工调试和系统思维,确保代码质量。典型应用场景包括单元测试生成、样板代码编写等,合理使用可提升40%以上的开发效率。随着92%的开发者已开始使用这类工具,掌握人机协作编程模式成为现代开发者的必备技能。

weixin_29035405的博客 214

R语言安装包镜像报错?5分钟教你快速切换国内镜像源(含清华/阿里云配置)

本文详细介绍了R语言安装包镜像报错的解决方案,包括如何快速切换国内镜像源(如清华、阿里云等),解决'无法读写貯藏處索引'等常见问题。通过图形界面和命令行两种方式,帮助用户高效配置镜像源,提升R语言包安装速度与稳定性。

weixin_29053073的博客 418

C编译器前端语法分析核心:嵌入式场景下的LL(1)解析实现

语法分析是编译器前端的关键阶段,负责将词法单元(token)转换为具有语义结构的抽象语法树(AST)。其核心原理基于形式文法与FIRST/FOLLOW集驱动的确定性推导,技术价值在于保障符号表构建准确、栈帧布局合理及硬件寄存器访问安全。在嵌入式开发中,该过程直接影响中断服务函数(ISR)、volatile/const修饰符、packed结构体等关键特性的正确识别与代码生成。典型应用场景包括ARM GCC、ESP-IDF等交叉编译工具链对C源码的解析,以及资源受限MCU上轻量级静态分析器的构建。本文聚焦C语言

weixin_28809949的博客 287

优化YOLOv8检测精度:Damo-YOLO的RepGFPN特征融合技术解析【YOLOv8】

YOLOv8在结构上依旧延续了自YOLOv4以来的CSPNet(Cross Stage Partial Network)和FPN(Feature Pyramid Network)的设计,结合了PANet(Path Aggregation Network)来增强特征的多尺度表达。然而,随着目标检测任务的复杂性增加,如何更有效地融合不同层级的特征成为提升检测性能的关键。Damo-YOLO中的RepGFPN引入了重参数化的思想,通过在训练和推理阶段对特征融合模块进行结构优化,显著提升了检测效果。

博客 1583

数据集FFHQ和LSUN介绍【包含FFHQ1024,515,256,128分辨率图像获取方法】

FFHQ全称Flickr-Faces-High-Quality(Flickr-Faces-HQ),最初是作为生成式对抗网络(GAN)的基准创建的,也用于StyleGAN的训练数据集中,并由英伟达于2019年开源。CVPR_2019Flickr-Faces-HQ (FFHQ)其由 70,000 张分辨率为 1024×1024 的高质量 PNG 图像组成,在年龄、种族和图像背景方面包含相当大的差异。它对眼镜、太阳镜、帽子等配饰也有很好的覆盖。

zik的博客 3976

Meta Muse Code 深度解析:从代码生成到任务执行的 AI 编程智能体革命

在软件开发领域,AI 编程工具正从基础的代码补全向更高级的自动化演进。其核心原理在于,通过大语言模型理解开发者意图,并结合代码库上下文进行分析与生成。这带来了显著的技术价值:它能将开发者从重复性的模式化编码中解放出来,提升开发效率,并降低人为错误。典型的应用场景包括快速搭建项目脚手架、生成 CRUD 接口、进行代码重构以及编写单元测试等。本文聚焦的 Meta Muse Code,正是这一趋势下的前沿探索。它被定位为“编程智能体”,其核心突破在于实现了从被动生成代码片段到主动理解并执行复杂开发任务的跨越。通过

weixin_30764883的博客 377

SPI 总线信号完整性与时序一致性测试

SPI总线测试的核心目标是验证其电气与时序行为是否满足芯片规格要求,确保通信可靠性

硬核科技 328

AI原生应用多语言架构设计:从字符编码崩塌到LLM驱动翻译的5步可落地实施法

解决AI原生应用多语言支持难题,提出可落地的5步架构法:统一UTF-8编码、LLM驱动实时翻译、语境感知本地化、动态资源加载与A/B测试验证。适用于全球化SaaS与智能终端场景,提升研发效率与用户体验一致性。AI原生软件研发多语言支持策略值得收藏。

InstrGap的博客 410

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

如何通过OpenCode实现AI编程助手本地部署:3种高效方案与实战指南

OpenCode是一款开源的AI编程助手,专为终端环境设计,提供灵活的模型选择和远程驱动能力。它能够无缝集成到开发工作流中,通过智能代码生成、错误修复和重构建议,显著提升开发效率。本文将为您提供完整的OpenCode本地部署指南,涵盖从环境准备到高级配置的全流程,帮助您快速搭建稳定高效的AI编程助手环境。 ## 挑战识别:为什么需要本地化AI编程助手? 在当前的开发环境中,开发者面临着诸多痛点

gitblog_00074的博客 447

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【Python】成功解决AttributeError: ‘_io.TextIOWrapper‘ object has no attribute ‘read_lines‘

📖【Python技巧分享】告别“AttributeError: '_io.TextIOWrapper' object has no attribute 'read_lines'”的尴尬!本文将带你一步步揭开这个常见错误的神秘面纱,从初识到解决,让你轻松掌握Python文件操作的正确姿势。🔍通过了解_io.TextIOWrapper和正确方法的使用,你将举一反三,避免类似错误。💪实践应用环节将带你亲身感受文件操作的魅力。快来一起学习,成为Python文件操作达人吧!#Python文件操作 #Attrib

创作高质量博文,分享知识,共同进步! 5157

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

RSTGameTranslation语音识别原理:WASAPI进程回环采集与Silero VAD的实时流水线

RSTGameTranslation 是一款开源的 Windows 游戏实时翻译工具,它能将游戏语音本地转写成文字,再翻译成目标语言并以字幕呈现。本文拆解它语音识别的核心原理:如何用 **WASAPI 进程回环(Process Loopback)** 只录游戏声音、排除自己朗读的 TTS,再用 **Silero VAD** 实时切分出每一句人声,最后交给 Whisper 完成识别——一条低延迟的音

gitblog_00110的博客 178

Rust构建PHP虚拟机:AI辅助的编译原理与系统编程实践

编译原理是计算机科学的核心基础,涉及将高级语言转换为可执行代码的完整技术链。其核心流程包括词法分析、语法解析、中间表示生成和代码执行等阶段,这些技术构成了现代编程语言运行时的基石。从技术价值看,深入理解编译原理不仅能提升对语言特性的掌控力,还能为性能优化、安全加固和语言设计提供底层支撑。在应用场景上,编译原理技术广泛应用于数据库查询优化、模板引擎设计、领域特定语言开发等工程实践。本文以PHP虚拟机开发为具体载体,通过Rust语言实现从词法分析到字节码执行的全流程,并重点探讨了AI辅助在代码生成、测试用例编写

weixin_30920853的博客 356

opencodex server.ts 拆分实战:2.3k 行巨型入口文件的安全解耦与模块化迁移

本篇技术指南聚焦 opencodex 项目中一次典型的"巨型文件安全拆分"实践:将 2322 行的 `src/server.ts`(HTTP/WS 入口 + Responses 数据面 + 管理接口 + 日志记录混合体)按"内聚关注点"拆分为 `src/server/` 目录下的独立模块。文档主体记录了 WP4.1(GUI 静态资源)与 WP4.2(Adapter 解析)两个已完成工作相,以及 r

gitblog_00237的博客 1043

Rust 标准库 IO 体系重构设计:RFC 0517(std::io 与 std::os 大改)深度解析

本文围绕 Rust RFC 0517([text/0517-io-os-reform.md](https://link.gitcode.com/i/f84db3d5efd784b2386cba6eb23559c1))展开,系统讲解 2014 年底 Rust 团队为 `std::io` / `std::os` 两大模块在 API 稳定化前进行的整体重设计:从 `Read`/`Write` trai

gitblog_00008的博客 417

词法分析器设计与实现:状态图、边界处理与在线实验避坑指南

词法分析是编译原理中自动机理论最典型的工程实践,它负责将源代码字符流切分为Token序列,其设计质量直接影响语法分析的输入可靠性。正规表达式描述模式、DFA刻画识别过程,而词法分析器正是这一抽象模型的落地载体。在C语言课程项目中,实现一个支持关键字、标识符、无符号整数、运算符、分界符识别并具备错误恢复能力的词法分析器,需要重点解决状态转换设计、最长匹配原则、缓冲区回退、EOF处理以及注释跳过等边界问题。在线实验平台通常隐藏异常输入,如非法字符、跨行注释、Windows换行符、文件末尾无换行等场景,工程实践中

weixin_34226182的博客 185
上一篇: 翻译《有关编程、重构及其他的终极问题?》——20.光对文件做EOF检查可能还不够
下一篇: 翻译《有关编程、重构及其他的终极问题?》——22.不要使用#pragram warning(default-X)
headman
博客等级 码龄25年 55粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值