AI开发C语言应用按步走,表达式计算器calc的第十一步,Token 联合体、哈希表满报错、批处理变量赋值
calc11 — Token 联合体、哈希表满报错、批处理变量赋值1. 概述本次迭代基于 suggestions.md 中的建议完成了三项代码改进Token 联合体— 将value和name字段合并为联合体减少内存占用哈希表满报错— 变量符号表满时输出错误提示而非静默丢失批处理变量赋值—./calc x 5现在可直接在批处理模式中赋值2. 变更清单文件操作说明parse.h编辑Token 结构体改用联合体union { double value; char name[32]; } data新增MAX_NAME 32宏parse.c编辑tok.value→tok.data.valuetok.name→tok.data.nameeval.c编辑t.value→t.data.valuet.name→t.data.namesym.c编辑sym_set循环结束后添加满表报错symbol table is fullmain.c编辑parse_and_eval增加is_assignment检测支持批处理变量赋值test.expr编辑x5/y10从错误用例改为成功用例退出码 03. Token 联合体3.1 改造前typedefstruct{TokenType type;doublevalue;// 每个 Token 占 8 字节intcol;charname[32];// 每个 Token 占 32 字节}Token;// 总计 48 字节3.2 改造后#defineMAX_NAME32typedefstruct{TokenType type;intcol;union{doublevalue;// TOKEN_NUMBER 时使用charname[MAX_NAME];// TOKEN_IDENTIFIER 时使用}data;}Token;// 总计 40 字节节省 8 字节value和name共享同一块内存type字段决定访问哪个成员。3.3 涉及的文件所有访问tok.value/t.value和tok.name/t.name的地方均改为tok.data.value/t.data.value和tok.data.name/t.data.name涉及parse.c和eval.c。4. 哈希表满报错在sym.c的sym_set函数中线性探测循环结束后添加/* 表满 */fprintf(stderr, error: symbol table is full, cannot set %s\n,name);此前sym_set在 256 个桶全满时静默返回赋值丢失且无任何提示。5. 批处理变量赋值5.1 改造前parse_and_eval仅支持普通表达式求值./calc x5报错退出。5.2 改造后parse_and_eval中调用is_assignment检测赋值模式staticintparse_and_eval(constchar*input){charvar_name[32];if(is_assignment(input,var_name,sizeof(var_name))){constchar*pinput;while(*p*p!)p;constchar*rhsp1;while(*rhsisspace((unsignedchar)*rhs))rhs;doubleresult;if(eval_expr(rhs,result)!0)return1;sym_set(var_name,result);printf(%g\n,result);return0;}doubleresult;if(eval_expr(input,result)!0)return1;printf(%g\n,result);return0;}5.3 使用示例$ ./build/calcx 5 38注意批处理模式每次调用是独立进程变量表不跨进程持久化。链式变量引用如y x * 2需在 REPL 会话中完成。6. 目录结构calc/ ├── Makefile ├── parse.h / parse.c # Token 联合体 ├── eval.h / eval.c ├── sym.h / sym.c # 哈希表满报错 ├── main.c # 批处理变量赋值 ├── test.expr # 29 个测试用例 ├── doc/ │ ├── readme.md │ ├── calc1.md ~ calc10.md │ └── calc11.md # 本次构建 └── build/ └── calc7. 测试验证$maketestcalc — 测试套件PASS[1](90-18)/315 →39... PASS[23]x5→5PASS[24]y10→10...29passed,0failed,29total批处理变量赋值测试通过x5输出5y10输出10。

相关新闻

基于YOLOv11的焊接缺陷检测系统设计与优化

基于YOLOv11的焊接缺陷检测系统设计与优化

1. 项目背景与核心价值 焊接缺陷检测一直是工业质检领域的痛点问题。传统人工目检效率低下且容易漏检,而基于机器视觉的自动化方案往往面临复杂场景适应性差的问题。这个毕业设计项目选择基于YOLOv11构建焊接缺陷检测系统,正是瞄准了这一行业刚需。 我去…

2026/7/30 7:50:07 阅读更多 →
AI技术如何高效重构遗留代码系统

AI技术如何高效重构遗留代码系统

1. 项目概述:当AI遇上遗留代码十年前写的Java代码还在线上跑着,每次新人接手都要花两周才能勉强理解业务逻辑;五年前那个离职同事写的Python脚本至今没人敢动,生怕一改就引发连锁反应——这就是遗留代码的典型困境。作为经历过数十…

2026/8/11 8:22:10 阅读更多 →
DRA79x串行通信接口全解析:从UART到PCIe的配置与实战

DRA79x串行通信接口全解析:从UART到PCIe的配置与实战

1. DRA79x系列串行通信接口概览与设计哲学在嵌入式系统开发,尤其是汽车电子和工业控制这类对实时性、可靠性和连接性要求极高的领域,处理器与外设、传感器、执行器乃至其他处理器之间的通信是系统设计的命脉。串行通信接口,作为这条命脉上的核…

2026/8/15 16:01:29 阅读更多 →

最新新闻

Android计算摄影实战:PhotonCamera开源框架构建实时图像处理管线

Android计算摄影实战:PhotonCamera开源框架构建实时图像处理管线

1. 项目概述:从“拍照”到“计算”的跨越 手机摄影发展到今天,早已不是简单地按下快门。当硬件传感器尺寸和镜头模组在物理上逼近极限时,计算摄影(Computational Photography)成为了决定成像质量的下一个战场。我们谈论…

2026/8/16 8:53:56 阅读更多 →
ClickHouse 小 Part 堆积复盘:从写入批次和 Merge 队列找证据

ClickHouse 小 Part 堆积复盘:从写入批次和 Merge 队列找证据

ClickHouse 小 Part 堆积复盘:从写入批次和 Merge 队列找证据 ClickHouse 小 Part 堆积通常是写入粒度、Merge 资源和查询压力共同作用。复盘先按表、分区和时间查看系统表,不用一个 Parts 数量直接给参数定罪。 先看 Parts 的增长方式 按表和分区查看 s…

2026/8/16 8:53:56 阅读更多 →
企业战略规划年年调,为何总跟不上市场变化

企业战略规划年年调,为何总跟不上市场变化

企业战略规划年年调,为何总跟不上市场变化企业战略规划年年调整,却总跟不上市场变化,是不少To B企业在成长过程中反复遭遇的困境。本文讨论的范围,限定在企业决策层与营销核心团队,探讨的核心问题是:外部市…

2026/8/16 8:53:56 阅读更多 →
帧同步复盘要留什么:输入序列、Tick 和首次分歧状态

帧同步复盘要留什么:输入序列、Tick 和首次分歧状态

帧同步复盘要留什么:输入序列、Tick 和首次分歧状态 帧同步问题不能只保存“双方位置不一致”的截图。要找到分歧从哪一帧开始,必须保留输入和确定性状态摘要。 最小证据 每个 Tick 记录玩家输入序列、确认位、随机种子和关键状态哈希。出现差异时&#…

2026/8/16 8:53:56 阅读更多 →
蓝湖与MasterGo一体化工作流:从设计到开发的高效协同实践

蓝湖与MasterGo一体化工作流:从设计到开发的高效协同实践

1. 项目概述:从“工具”到“工作流”的认知升级 最近和几个不同规模团队的设计师、产品经理聊天,发现一个挺有意思的现象:大家提起“蓝湖”和“MasterGo”,第一反应往往是“哦,那个切图标注工具”和“那个在线设计工具…

2026/8/16 8:53:56 阅读更多 →
安卓文件同步避坑实战:关于 Syncthing for Android,新手最想弄清的5个问题

安卓文件同步避坑实战:关于 Syncthing for Android,新手最想弄清的5个问题

安卓文件同步避坑实战:关于 Syncthing for Android,新手最想弄清的5个问题 【免费下载链接】syncthing-android Wrapper of syncthing for Android. 项目地址: https://gitcode.com/gh_mirrors/sy/syncthing-android 你有没有经历过这样的瞬间&am…

2026/8/16 8:52:56 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →