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/24 14:01:51 阅读更多 →
AI技术如何高效重构遗留代码系统

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

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

2026/7/24 14:01:51 阅读更多 →
DRA79x串行通信接口全解析:从UART到PCIe的配置与实战

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

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

2026/7/24 14:00:51 阅读更多 →

最新新闻

AM574x异构SoC硬件调试:JTAG与TPIU时序配置与工程实践

AM574x异构SoC硬件调试:JTAG与TPIU时序配置与工程实践

1. 项目概述与核心价值在嵌入式系统开发,尤其是涉及像TI AM574x这类集成了双核Cortex-A15、双C66x DSP以及多个协处理器的复杂异构SoC时,硬件级的调试与跟踪能力不再是“锦上添花”,而是“雪中送炭”的必需品。想象一下,当你的系统…

2026/7/24 14:10:55 阅读更多 →
Java 企业级 SaaS 架构 B2C 微信小程序电商项目实战训练营07-全栈测试部署与运维实战

Java 企业级 SaaS 架构 B2C 微信小程序电商项目实战训练营07-全栈测试部署与运维实战

文章目录 一、概述 二、部署架构总览 2.1 生产环境拓扑 2.2 服务清单 三、后端构建与打包 3.1 Maven Profile 多环境管理 3.2 构建命令 3.3 构建产物分析 3.4 生产环境配置 3.5 启动命令 四、前端构建与部署 4.1 管理端构建 4.2 店铺端构建 4.3 移动端 H5 构建 4.4 微信小程序发…

2026/7/24 14:10:55 阅读更多 →
【具身智能】Claude Sonnet 5写IMU代码竟有“人格分裂”?用《旋生万物》公理 I2=−N 根治Agent几何幻觉(附螺旋积分器)

【具身智能】Claude Sonnet 5写IMU代码竟有“人格分裂”?用《旋生万物》公理 I2=−N 根治Agent几何幻觉(附螺旋积分器)

摘要:2026年7月,CSDN首页热议“TVA-具身智能如何跨越电子与原子鸿沟”。然而实测发现,被称为“最懂代码”的Claude Sonnet 5在编写IMU(惯性测量单元)姿态解算代码时,频繁出现2π相位跳变和螺距漂移——仿佛…

2026/7/24 14:10:55 阅读更多 →
CC2652RB射频与模拟外设深度解析:从数据手册到设计实战

CC2652RB射频与模拟外设深度解析:从数据手册到设计实战

1. 从数据手册到设计实战:CC2652RB射频与模拟外设深度解析在物联网设备开发中,选型一颗无线MCU时,我们最关心的往往是那几个硬核指标:通信距离有多远?功耗能有多低?传感器数据采得准不准?这些问…

2026/7/24 14:10:55 阅读更多 →
Claude AI编程助手:从自然语言到代码生成的开发效率提升指南

Claude AI编程助手:从自然语言到代码生成的开发效率提升指南

在日常开发中,很多开发者初次接触 Claude 时会产生误解,认为它是一款新型编译器或编程工具。实际上,Claude 是一个基于人工智能的对话助手,它能理解自然语言并协助完成编程任务,这与传统编译器有着本质区别。本文将详细…

2026/7/24 14:10:54 阅读更多 →
大模型接入的认证与计费:多模型供应商的统一网关设计

大模型接入的认证与计费:多模型供应商的统一网关设计

大模型接入的认证与计费:多模型供应商的统一网关设计 一、三个团队各用各的 API Key,月底账单混乱,财务说"分不清谁花了多少钱" 多模型供应商共存的企业场景下(OpenAI Claude 自建 vLLM),接入层…

2026/7/24 14:09:54 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻