AI开发C语言应用按步走,表达式计算器calc的第二十步,魔法数修复、测试分隔符、位运算截断检查、进制溢出检查
calc20 — 魔法数修复、测试分隔符、位运算截断检查、进制溢出检查1. 概述本次迭代从 suggestions.md 中选取了 4 个待改进项进行修复涵盖代码质量、测试框架和运行时健壮性三个方面。修复项编号问题类型C1var_name[32]魔法数代码质量G3测试文件分隔符与表达式分隔符;冲突测试框架G4位运算截断int无警告运行时健壮性G5进制数溢出无检查运行时健壮性2. 变更清单文件操作说明main.c编辑var_name[32]→var_name[MAX_NAME]2 处test.expr编辑分隔符;→反引号避免与表达式分隔符;冲突Makefile编辑IFS;→IFS\eval.c编辑新增#include limits.hcheck_int_trunc()函数6 处(int)转换前添加截断检查parse.c编辑新增#include errno.h#include stdio.h3 处strtoul后添加errno ERANGE溢出检查3. C1 —var_name[32]魔法数3.1 改造前charvar_name[32];硬编码的 32与parse.h中Token.name[32]无显式关联。3.2 改造后charvar_name[MAX_NAME];MAX_NAME在parse.h中定义为32两处统一引用修改一端时同步更新。4. G3 — 测试文件分隔符4.1 问题test.expr使用;作为字段分隔符但;现在也是合法的表达式分隔符表达式分隔功能导致1;2;3等表达式无法在测试文件中使用。4.2 方案将分隔符改为反引号原因反引号在 calc 的词法分析器中永远为非法字符TOKEN_ERROR不会与任何合法表达式冲突。文件改动test.expr;→MakefileIFS;→IFS\同时保留了;作为表达式分隔符的功能不变。5. G4 — 位运算截断检查5.1 问题eval.c中位运算操作数先转为int32 位超出INT_MAX2147483647的值被静默截断用户得不到提示。5.2 方案新增check_int_trunc函数在 6 处(int)转换前调用staticintcheck_int_trunc(longdoublev){if(vINT_MAX||vINT_MIN){fprintf(stderr, warning: value truncated to int\n);return1;}return0;}调用位置parse_bitor、parse_bitxor、parse_bitand、parse_shiftSHL/SHR、parse_unaryBITNOT。6. G5 — 进制数溢出检查6.1 问题parse.c中strtoul解析十六进制/二进制/八进制数字时超出unsigned long范围的值被静默截断为ULONG_MAX用户得不到提示。6.2 方案在每个strtoul调用前重置errno 0调用后检查errno ERANGEerrno0;val(longdouble)strtoul(input_pos,end,16);if(errnoERANGE)fprintf(stderr, warning: integer overflow\n);7. 测试验证$maketestcalc — 测试套件122passed,0failed,122total全部 122 个回归测试通过功能不变新增的检查仅在溢出/截断时输出警告不影响正常计算结果。

相关新闻

AI开发C语言应用按步走,表达式计算器calc的第十九步,注释、表达式分隔符、long double 精度

AI开发C语言应用按步走,表达式计算器calc的第十九步,注释、表达式分隔符、long double 精度

calc19 — 注释、表达式分隔符、long double 精度 1. 概述 本次迭代新增三项功能,并对全局数值类型进行了精度升级: 注释支持 — # 开头到行尾的内容被忽略表达式分隔符 — ; 分隔多个表达式,返回最后一个的值long double 精度 — 全局 doubl…

2026/7/27 19:00:02 阅读更多 →
JAVA毕设项目:基于 SpringBoot+Vue 的企业知识产权合规审核管理平台设计 信息化知识产权档案存储与查询系统 (源码+文档,讲解、调试运行,定制等)

JAVA毕设项目:基于 SpringBoot+Vue 的企业知识产权合规审核管理平台设计 信息化知识产权档案存储与查询系统 (源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 19:00:02 阅读更多 →
JAVA毕设项目:基于SpringBoot的宠物领养预约与跟进服务管理系统设计 公益宠物科普与领养帮扶平台实现 (源码+文档,讲解、调试运行,定制等)

JAVA毕设项目:基于SpringBoot的宠物领养预约与跟进服务管理系统设计 公益宠物科普与领养帮扶平台实现 (源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 19:00:02 阅读更多 →

最新新闻

Logseq Anki Sync 终极指南:如何实现知识卡片的高效同步

Logseq Anki Sync 终极指南:如何实现知识卡片的高效同步

Logseq Anki Sync 终极指南:如何实现知识卡片的高效同步 【免费下载链接】logseq-anki-sync An logseq to anki syncing plugin with superpowers - image occlusion, card direction, incremental cards, and a lot more. 项目地址: https://gitcode.com/gh_mirr…

2026/7/27 19:07:04 阅读更多 →
气动元器件选型(精密版)

气动元器件选型(精密版)

这是小丸子第十期的气动元器件选型,是最精密的版本 迷你气缸 | MA系列气缸 | AirTAC | 亚德客 1.气动技术基础 1.概述:机器通常是由原动机、传动装置、工作机构三部分组成。传动装置常见的类型有机械传动、流体传动。流体传动是以受压的流体为工作介质对能量的转化、传递、控…

2026/7/27 19:07:04 阅读更多 →
泛程序心得:小白建站超简单

泛程序心得:小白建站超简单

在互联网时代,拥有一个属于自己的网站是很多人的梦想。然而,对于小白来说,建站似乎是一件遥不可及的事情。但其实,只要掌握了泛程序的方法,小白建站也可以超简单!我曾经也是个建站小白,面对复杂…

2026/7/27 19:07:04 阅读更多 →
终极指南:使用XB1ControllerBatteryIndicator轻松监控Xbox控制器电量 [特殊字符]

终极指南:使用XB1ControllerBatteryIndicator轻松监控Xbox控制器电量 [特殊字符]

终极指南:使用XB1ControllerBatteryIndicator轻松监控Xbox控制器电量 🔋 【免费下载链接】XB1ControllerBatteryIndicator A tray application that shows a battery indicator for an Xbox-ish controller and gives a notification when the battery l…

2026/7/27 19:07:04 阅读更多 →
如何在Zend-Expressive中实现RESTful API:从路由到响应的完整教程

如何在Zend-Expressive中实现RESTful API:从路由到响应的完整教程

如何在Zend-Expressive中实现RESTful API:从路由到响应的完整教程 【免费下载链接】zend-expressive PSR-15 middleware in minutes! 项目地址: https://gitcode.com/gh_mirrors/ze/zend-expressive Zend-Expressive是一个轻量级的PSR-15中间件框架&#xff…

2026/7/27 19:07:04 阅读更多 →
api2go源码解析:核心组件的设计思路与实现细节

api2go源码解析:核心组件的设计思路与实现细节

api2go源码解析:核心组件的设计思路与实现细节 【免费下载链接】api2go JSONAPI.org Implementation for Go 项目地址: https://gitcode.com/gh_mirrors/ap/api2go api2go是Go语言中实现JSONAPI.org规范的强大库,它提供了完整的RESTful API开发框…

2026/7/27 19:06:04 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻