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

AI编程幻觉控制:从符号错误到语义可信的工程实践 编程大模型生成代码时的‘幻觉’,本质是符号误用、语义错配与上下文失准三重风险叠加的结果。其根源在于自回归采样中‘确定性’与‘表达力’的数学权衡,而非单纯能力不足。通过执行计划隔离、运行时符号验证、版本感知知识蒸馏和确定性采样等关键技术,可系统性压降幻觉率,提升代码首次通过率与CI集成可靠性。本文聚焦Grok 4.20 Reasoning在BridgeBench基准中达成91.8%幻觉控制能力的工程实现路径,覆盖契约式提示设计、沙箱验证回路与私有SDK对齐等真实落地场景。 阅读详情

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

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


本书背景说明、总目录等介绍,可以跳转到以下链接进行查看:
http://blog.youkuaiyun.com/headman/article/details/53045891

欢迎大家转载,但请附上原作者以及翻译者的名字、原文出处,以尊重光荣的劳动者。


9.使用’\0’符号作为结尾标记

下面这段代码来自Nodepad++项目(译者注:我个人非常喜欢免费开源的Nodepad++多功能文本编辑器,在这里推销一下)。PVS-Studio诊断出来的错误说明为:The error text: V528 It is odd that pointer to ‘char’ type is compared with the ‘\0’ value. Probably meant: headerM != ‘\0’(译者注:大意是指向char类型的指针和’\0’直接比较是奇怪的,可能本意是:*headerM != ‘\0’,注意,加了一个)。

TCHAR headerM[headerSize] = TEXT("");
...
size_t Printer::doPrint(bool justDoIt)
{
    ...
    if (headerM != '\0')
    ...
}

解释
非常感谢上面代码的作者使用了\0来标明字符串结尾标示(译者注:作者意思是幸亏作者没有直接使用0,看后面就明白了),让我们可以容易的发现并修复错误,从一定意义上来说(译者注:虽然作者犯了错),但这个错误还是不错的(译者注:作者有点小嘲讽又带点小欣赏,看后面就知道了)。

想象一下,如果上面的代码写成如下的方式:

if (headerM != 0)

那么这个字符数组的地址就要和0比较,那么这个比较结果就毫无意义了,因为绝大多数指针的地址都是非0的,所以这个返回总是true,那么问题就来了,这是个错误还是个多余的检查呢?特别是如果代码是很久之前就被写好的(译者注:你敢轻易修改吗?)

但是,自从程序员们开始使用\0以来,我们就能明确知道只是用来做字符串结尾比较的。另外,虽然我们知道使用headerM指针和NULL比较同样无意义(译者注:0、NULL和\0大部分情况都是一个值,表意不同而已),但归根到底,我们用NULL和\0就能让程序员们分清到底是进行一个指针是否为空的比较,还是一个字符串的结尾符比较,这样就能避免一些错误。为了修复上面的代码,我们还需要增加一个指针解除操作。

正确的代码

TCHAR headerM[headerSize] = TEXT("");
...
size_t Printer::doPrint(bool justDoIt)
{
    ...
    if (*headerM != _T('\0'))
    ...
}

建议
比较语句中,不推荐直接使0,而是使用NULL,false或者字符串结尾符号\0,如果都用不上,再考虑使用0。所以,不要偷懒,避免使用在所有情况中使用0,这样就能让代码更容易理解,并且更容易发现错误。

下面是一些技巧:

  • 0 - 只使用在需要整型值0的情况;
  • nullptr - 作为C++的null指针;
  • NULL - 作为C的null指针;
  • \0,L\0,_T\0 - 作为字符串结尾符;
  • 0.0,0.0f - 作为浮点值的0;
  • false,FALSE - 作为false;

坚持使用上面的规则可以让你的代码更干净,使你的代码在review的时候更容易找到问题。

提示工程:开发者的新基建与核心工作流重构 提示工程已从AI辅助技巧演进为现代软件开发的底层能力,其本质是用结构化语言对齐人类意图与大模型行为。它建立在指令设计、上下文编排、输出约束与反馈闭环四大技术原理之上,具备可测量、可复现、可集成CI/CD的工程化特征。相比传统机器学习,提示工程显著降低试错成本与交付周期,支撑智能客服、合同解析、营销文案生成等高频业务场景。尤其在Qwen2、Claude 3等强推理模型普及与LangChain、DSPy等工具链成熟的双重驱动下,掌握Prompt Engineering正成为开发者提升交付效率、构建差异化竞争力的 阅读详情

相关推荐

2026年AI编程平替实战指南:本地化、稳定性与真实场景准确率

AI编程助手已从概念走向工程刚需,其核心价值在于降低重复编码成本、提升上下文理解深度与长周期任务执行可靠性。随着Qwen2.5、Phi-3-mini等轻量级代码模型在端侧成熟,本地化部署成为保障低延迟、数据安全与网络鲁棒性的关键技术路径;而跨文件AST解析、向量库索引、CodeGraph建模等机制,则显著提升了上下文连贯性与重构准确率。在Python/Go/TypeScript多语言真实项目(如Temporal SDK)中,工具的补全质量不再取决于参数规模,而取决于对语法结构、项目拓扑与开发意图的联合建模能

weixin_30924087的博客 496

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

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

老顾的记录 1207

Creative AI实操全景图:重构创意生产链的五大工作流支柱

Creative AI并非泛指生成式AI,而是以人类创意目标为驱动、将AI深度嵌入专业工作流的人机协同范式。其核心在于理解‘语义到视觉/听觉的结构化映射’原理,通过提示工程、多模态协同、节点化控制流等技术手段,显著提升单位时间内的有效创意产出密度。该技术已成熟落地于视觉内容生产、音视频工程与文本创意辅助三大场景,尤其适用于海报生成、脚本分镜、广告语批量迭代等强反馈闭环任务。本文聚焦2023–2024年真实项目验证的可复用工作流,涵盖Stable Diffusion控制流设计、ComfyUI节点编排、版权合规

440

可以用在 VS Code 中的正则表达式小技巧

翻译:疯狂的技术宅 medium.freecodecamp.org/simple-rege… 声明:未经许可,禁止转载 你是不是一直都想学正则表达式,但是因为它的复杂性而被推迟了?在本文中,我将向你展示五个易于学习的正则技巧,你可以立即在自己喜欢的文本编辑器中使用它们。 文本编辑器设置 虽然现在几乎所有的文本编辑器都支持正则表达式,但我在本教程中用的是 Visual Studio C...

weixin_33972649的博客 721

WizardWu编程网:面向生产环境的中文技术知识网

在软件工程实践中,‘可复现的问题解决’与‘环境锁定的知识沉淀’是保障系统稳定性的核心能力。本文聚焦于一种扎根真实生产场景、以问题为锚点、以中文母语思维组织内容的技术知识体系构建方法——它不追求概念泛化,而强调错误提示字符串、具体版本号、可执行命令和带时间戳的截图证据链;其本质是将文档升维为可验证、可集成、可协作的工程资产。这种范式特别适用于企业遗留系统维护、跨版本兼容调试、非理想环境(如低配服务器、旧版OS)下的故障排除等高频刚需场景,为一线开发者提供即查即用的‘螺丝刀级’技术支持。

lanmh的专栏 429

GPT-5.5 Instant Prompt重构:从指令执行到意图共谋

大语言模型交互正经历范式跃迁——从传统Prompt工程的‘指令-响应’线性逻辑,转向以用户真实意图为中心的动态协同机制。其底层原理在于模型具备上下文主权识别、多层实时过滤(事实性/场景性/人格性)与行为契约校验能力,技术价值体现在显著降低幻觉率、提升任务闭环效率与个性化响应深度。典型应用场景覆盖产品需求分析、法律合同审查、广告文案生成及嵌入式代码开发等需高精度人机协作的工程实践。本文聚焦GPT-5.5 Instant所代表的新一代交互范式,解析Prompt如何从‘写给AI看’进化为‘与AI共写’,并实证验证

weixin_33826609的博客 332

普通人零代码AI应用实战:从问题定义到结果校验的完整闭环

人工智能民主化不是指人人会训练大模型,而是让非技术人员也能基于真实需求,调用现有AI工具完成端到端任务。其核心在于理解AI服务的三层本质:输入(结构化提示词)、处理(云/端协同的确定性接口)、输出(可验证、可干预的结果)。关键技术支撑包括OCR识别、自然语言转结构化数据、跨平台自动化集成,以及贯穿始终的人机协同校验机制。在医疗提醒、小商业优化、教育辅助等高频场景中,真正决定成败的并非模型参数大小,而是用户能否精准拆解问题、选择适配工具链、识别输出偏差并及时人工介入。本文即以家庭用药系统等真实案例,还原一个无

weixin_34014555的博客 372

七句数学名言背后的思维操作系统解剖

数学引文不是哲理金句,而是伟大头脑攻坚具体问题时的认知快照,承载着定义问题边界、重构思维范式、验证逻辑极限等核心能力。从高斯‘数学是科学的皇后’到图灵‘机器能思考吗’的降维重构,这些表达本质是数学思维的操作系统接口——它不教公式推导,而训练如何为物理现象铸造容器、为混沌数据建立相空间、为抽象猜想设计可证伪路径。其技术价值在于将隐性思维显性化、可验证、可迁移,广泛应用于AI可解释性建模、工程故障诊断、算法复杂度评估等真实场景。本文以七位数学家原初语境为锚点,聚焦‘思维卡点’而非知识缺口,提供Python复现、

aikunjiao3421的博客 378

Claude Opus 4.7:认知链路级AI如何重构技术文档处理与专业决策

大语言模型正从‘文本生成工具’迈向‘认知协作者’,其核心演进在于对意图理解、长程逻辑与结构化输出的深度建模。当前行业高频关注的‘长上下文处理’‘跨文档逻辑缝合’‘领域术语转译’等能力,已不再依赖单纯参数堆叠,而是依托动态记忆图谱(DMG)与结构化输出引擎(SOE)等机制,实现从语义识别到决策支持的跃迁。这类技术价值在技术白皮书重构、法律风险穿透审查、嵌入式日志语义翻译等强逻辑、高准确率要求的工程场景中尤为凸显,显著降低人工核验成本与跨角色沟通损耗。本文聚焦Claude Opus 4.7在真实复杂任务中的认知

weixin_30603633的博客 350

aily Blockly IDE:面向初学者的Arduino可视化编程工具

Blockly 是一种基于图形化积木的编程范式,通过拖拽组合实现逻辑表达,其核心原理是将可视化操作映射为结构化代码生成。在嵌入式开发中,它显著降低硬件入门门槛,技术价值在于屏蔽底层细节(如 pinMode、analogRead 参数)、内置类型校验与教学引导规则,使零基础用户可在5分钟内完成传感器响应实验。典型应用场景包括中小学创客教育、电子工艺实训及快速原型验证,尤其适配 Arduino Uno/Nano 等主流开发板。本文聚焦 aily blockly IDE 这一轻量级实现,解析其如何以 WebAss

注重长远 天天积累 cqujsjcyj 397

Excel通配符详解:*、?、~三大符号原理与实战应用

Excel通配符是面向文本模糊匹配的基础技术能力,核心由星号(*)代表任意长度字符、问号(?)匹配单个字符、波浪号(~)实现转义构成。其底层原理基于字符串模式匹配,不依赖正则引擎,却能在COUNTIF、XLOOKUP、查找替换等场景中高效处理不确定文本。技术价值在于将人工筛查转化为毫秒级条件统计与智能定位,显著提升财务、运营、HR等岗位的数据清洗与分析效率。典型应用场景包括模糊筛选客户标签、标准化杂乱编码、提取固定格式字段及构建动态风险预警仪表盘。掌握通配符,是打通Excel从基础操作迈向自动化数据处理的关

weixin_34209851的博客 365

ArkClaw:AI辅助创作平台如何重构内容工作流,提升50%效率

在内容创作领域,高效的工作流管理是提升生产力的关键。其核心原理在于通过整合灵感捕获、素材管理、写作编辑与多平台分发等环节,构建端到端的数字化创作环境,从而减少上下文切换带来的效率损耗。这一理念的技术价值在于将创作者从重复性劳动中解放,使其能聚焦于核心的创意与思考。典型的应用场景包括技术博客写作、多平台内容运营以及个人知识体系构建。本文以ArkClaw平台为例,深入解析其如何通过智能素材库与AI辅助写作两大核心模块,实现创作流程的自动化与智能化。其中,智能素材库扮演着私人知识引擎的角色,而AI则作为写作副驾驶

weixin_33898233的博客 405

2026企业级AI编程工具选型指南:安全、协同与工程深度集成

AI编程工具已从辅助插件演进为现代软件工程的核心基础设施。其本质是基于代码语义理解的智能增强系统,依赖AST解析、私有知识图谱构建和IDE深度耦合等关键技术实现高精度上下文感知。在金融、政务等强合规场景中,工具必须满足等保三级、SOC2 Type II及数据不出域等硬性要求;在团队协作层面,则需支撑跨技术栈契约同步、实时上下文共享与审计溯源。本文聚焦GitHub Copilot Business、DeepCode Pro等主流付费方案,实测其在Java/Spring Boot遗留重构、金融风控模块开发及Ty

weixin_33834628的博客 385

Context Engineering:重构大模型人机协作的结构化上下文工程方法论

上下文工程(Context Engineering)是面向大模型生产落地的核心工程范式,其本质是将模糊的任务指令转化为结构化、可验证、可迭代的语义契约。它突破传统Prompt Engineering依赖自然语言描述的局限,直面大模型attention机制的硬约束与长距离依赖衰减问题,通过角色边界定义、任务可证伪性声明、输入感官建模、输出机器契约等技术手段,系统性提升模型在金融风控、医疗问诊、工业文档解析等高敏场景下的推理稳定性与合规输出能力。本文聚焦Context Schema七大原子单元与Schema-F

areen7003的博客 427

Claude Opus 4.6编程辅助实战接入指南

编程辅助AI的核心价值在于提升开发者认知效率与工程落地质量,而非替代人工决策。其技术原理依赖上下文理解深度、跨语言符号绑定与长程逻辑一致性,显著增强代码生成的语义准确性和范式兼容性。在金融系统重构、嵌入式协议开发、教育场景代码生成等真实工程中,Claude Opus 4.6展现出对多范式混合代码(如Shell+Python+YAML)和复杂类型约束的强处理能力。但需注意其边界:不适用于实时系统、硬件寄存器映射等确定性执行场景。本文聚焦国内合规路径下的五种工程化接入方式——国产AI中台代理、本地桌面版+中转服

weixin_30536513的博客 405

MOOS-ivp 实验一 MOOS软件的安装与执行

MOOS-ivp实验一 实验一步骤总结 文章目录MOOS-ivp实验一前言一、实验一1.下载软件2.安装必要的插件3.安装后检查4.路径添加5.执行示例文件总结 前言 在moos学习过程中,我觉得最好把学习的每一步骤都总结一下,方便日后进行回顾。moos官网设置了十八个实验,涉及到了moos的各个方面,完成这些实验也是moos入门的好办法。 一、实验一 实验一主要内容仅仅是软件的安装,仅仅这一步就花费了我接近两天的时间。主要问题发生在linux系统的配置问题上。 1.下载软件 svn co https:

weixin_44151170的博客 6671

数学建模不是解题,而是把现实翻译成可计算的语言

数学建模是连接抽象数学与复杂现实的桥梁,其本质在于将模糊、多变、充满灰箱因素的真实问题,结构化为可定义、可量化、可验证的数学对象。它依托分解、化归、抽象等核心数学思想,而非堆砌算法工具;强调问题驱动而非模型先行,重视目标冲突协调、不确定性建模与鲁棒性设计。在金融风控、智能调度、用户行为分析、城市治理等广泛场景中,建模能力直接决定数据价值能否转化为可落地的决策。掌握数学建模,就是掌握一种‘用数学诚实描述世界’的底层工程思维。

weixin_34342992的博客 466

域控制器开发避坑实录:从硬件设计到软件集成的5个关键挑战

本文深入剖析了域控制器开发中的5大关键挑战,从硬件选型到软件集成,涵盖智能驾驶芯片选择、实时性优化、AUTOSAR架构适配等核心问题。通过实战案例和数据对比,为工程师提供避坑指南,助力提升开发效率和系统可靠性。

weixin_29258297的博客 395

Telegram 上的 Claude 编程 CLI:移动端 AI 代码终端实战

CLI(命令行接口)是开发者最基础、最高效的交互范式,其核心在于指令驱动、状态延续与文本流通信。随着大模型能力下沉,将 AI 编程能力(如 Claude 的代码理解、生成与调试)封装为类终端体验,正成为轻量化工程落地的关键路径。这种方案跳脱传统 GUI 应用的启动延迟与界面束缚,依托 Telegram 等消息平台实现低门槛触达,天然支持多轮上下文、代码块渲染、文件解析与细粒度参数控制,显著缩短‘想法→可执行代码’的响应链路。本文聚焦于如何在 Telegram 中构建一个真正具备 CLI 语义的 AI 编程终

weixin_36250541的博客 502

别再手动调参了!用Optuna+PyTorch搞定Transformer时序预测超参数(附完整代码)

本文详细介绍了如何利用Optuna和PyTorch实现Transformer时序预测模型的自动化超参数调优。通过贝叶斯优化技术,显著提升单变量时序预测的效率和准确性,并附有完整代码实现。文章涵盖模型架构设计、数据预处理、Optuna调参实战及生产环境部署建议,为开发者提供一站式解决方案。

weixin_33704234的博客 578

一文搞懂雷达脉冲压缩和匹配滤波器

为了解决传统单频脉冲雷达面临的作用距离和空间分辨力之间的矛盾,脉冲压缩理论被提出。在接收端设计一个和发射信号能够“共轭匹配”的网络来实现脉冲压缩。接收到的回波信号通过匹配滤波器时,滤波器的增益在信号越强的频率点越大;在信号越弱的频率点,增益越小,通过这样的方式使信号在时域更加集中。脉冲压缩技术大致可分为线性调频(LFM)和相位编码。其中LFM信号易于通过硬件或各种技术产生,但是进行匹配滤波后主旁瓣比高达13.2dB,在检测多个目标时,强目标的回波旁瓣可能会把弱小信号覆盖,导致弱小信号的检测受到影响。

FPGA入门到跑路 9938

AI人机协作新范式:问题校准能力决定效率上限

在大模型普遍具备高精度答案生成能力的今天,‘问对问题’正成为人机协同的核心瓶颈。问题校准能力——即识别模糊前提、发现逻辑断点、主动追问澄清——本质上是AI对人类意图边界的深度理解,它依赖中文语境锚定与真实场景训练,而非单纯参数堆叠。该能力显著提升家庭教育、本土商业决策、政策落地解读等强语境任务的可执行性,尤其在家庭技能、任务意图校准等高频搜索场景中,直接降低用户行动门槛,将抽象焦虑转化为第一步可操作指令。

weixin_34224941的博客 456

从零搭建自动驾驶仿真环境:我的Nuplan-devkit实战笔记(含PyCharm配置技巧)

本文详细记录了从零搭建Nuplan-devkit自动驾驶仿真环境的完整流程,包括conda环境配置、pip版本控制、PyCharm专业版集成等关键步骤。特别针对Ubuntu系统下的依赖管理、数据目录优化和性能调优提供了实用技巧,帮助开发者高效构建稳定的自动驾驶仿真开发环境。

weixin_30505225的博客 480
上一篇: 翻译《有关编程、重构及其他的终极问题?》——8.记住:析构函数中的异常是危险的
下一篇: 翻译《有关编程、重构及其他的终极问题?》——10.避免使用多个小的#ifdef块
headman
博客等级 码龄25年 55粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值