AI开发C语言应用按步走,表达式计算器calc的第十九步,注释、表达式分隔符、long double 精度 calc19 — 注释、表达式分隔符、long double 精度1. 概述本次迭代新增三项功能并对全局数值类型进行了精度升级注释支持—#开头到行尾的内容被忽略表达式分隔符—;分隔多个表达式返回最后一个的值long double 精度— 全局double→long double提升运算精度2. 变更清单文件操作说明parse.h编辑新增TOKEN_SEMICOLONToken.value类型double→long doubleparse.c重写#注释跳过;解析为TOKEN_SEMICOLONstrtold/strtoul替换strtodeval.h编辑API 参数double*→long double*新增eval_exprs声明eval.c重写全部double→long doublefmod→fmodl新增eval_exprs实现sym.h编辑API 参数double→long doublesym.c编辑SymEntry.valuedouble→long double%Lgfunc.h编辑API 参数double*→long double*func.c重写args/valdouble→long doublesinl/cosl等l后缀数学函数main.c重写double→long double%Lg调用eval_exprs替代eval_exprtest.expr编辑修复溢出测试值新增#注释测试修复0b1010/0777解析3. 注释支持在parse_next中当遇到#时跳过直到行尾或字符串结束if(*input_pos#){while(*input_pos*input_pos!\n){column;input_pos;}if(*input_pos\n){line;column1;input_pos;}returnparse_next();/* 递归获取下一个 token */}示例calc 3 5 # 这是注释 84. 表达式分隔符4.1 新增eval_exprsAPIinteval_exprs(constchar*input,longdouble*result);循环解析多个以;分隔的表达式返回最后一个的值inteval_exprs(constchar*input,longdouble*result){parse_init(input);eval_error0;longdoubleval0.0;while(!eval_error){valparse_expr();if(eval_error)return1;Token tparse_peek();if(t.typeTOKEN_SEMICOLON){parse_consume();continue;}if(t.type!TOKEN_END){print_error_context(t.col);fprintf(stderr, error: unexpected token after expression\n);return1;}break;}*resultval;return0;}4.2 使用$ ./build/calc1; 2; 334.3 默认切换parse_and_eval和repl均改为调用eval_exprs因此;分隔符在所有模式下均可使用。5. long double 精度升级5.1 涉及范围组件类型变更影响Token 数值double→long double解析和存储求值器double→long double全部运算符号表double→long double变量值函数表double→long double参数和返回值主程序double→long double输出格式%Lg5.2 数学函数后缀所有math.h函数调用改为l后缀版本函数原版long double 版正弦sinsinl余弦coscosl正切tantanl平方根sqrtsqrtl幂运算powpowl取模fmodfmodl绝对值fabsfabsl5.3 精度提升类型尾数位数十进制精度最大值double53 bits~15 位~1.79e308long double64 bits~19 位~1.19e49326. 测试验证$maketestcalc — 测试套件PASS[1](90-18)/315 →39... PASS[30]1e5000*1e5000 → error... PASS[61]0b1010 →10PASS[62]0777 →511... PASS[122]35# comment → 8122passed,0failed,122total

相关新闻

相关新闻

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

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

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

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

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

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

2026/9/25 4:10:17
JAVA毕设项目: 基于Java的信息化企业员工考核成绩管理系统 企业岗位培训在线测评考试系统设计(源码+文档,讲解、调试运行,定制等)

JAVA毕设项目: 基于Java的信息化企业员工考核成绩管理系统 企业岗位培训在线测评考试系统设计(源码+文档,讲解、调试运行,定制等)

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

2026/9/22 9:32:18

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/9/26 23:24:47
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/9/26 18:48:15
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/9/26 3:42:08
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/9/26 11:37:29
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/26 4:08:27
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/9/26 21:11:24

日新闻

周新闻