请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

萌新终于完成了人生中第一个c项目( ͡° ͜ʖ ͡°)✧

先来看看效果

图片描述

虽然老师的一堂课只用了一个小时就完成了计算器程序, 对于萌新而言真正自己去实现其实还是挺费劲的

除了cMake文件和gtk.c照抄老师代码外其余都是自己实现, 此外我进行了一些优化

首先进行思路整理

老师的思路更类似于gtk的模式, 父套子 子套孙, 而我的更类似于依赖注入的模式

图片描述

优化点

1.首先对copy运算结构到上一次运算结构进行了优化, 变成了改变指针的方式, 这样相对于内存而言少了读取与复制, 只需要修改变量指针就能达到效果

老师代码
图片描述

我的代码
图片描述

2.对运算模块添加左右值标识用以实现我自己的单测, 先来看看我的测试文件, 是不是比老师的更清晰更加直观

图片描述

我遇到的一些问题和坑

1. css文件在设置background-color的时候先要重置background-image为none, 因为image的z-index比背景颜色优先级高所以挡住了
2. 代码编译链接运行都未报错的可能是ui文件导致的, 但是在glade可以正常打开, ID我也检查过是关联的, 替换成老师的ui就可以正常打开了

查看老师代码时的一些问题

1. https://git.imooc.com/coding-463/ProgramInC/src/master/Chapter15/gtk_ui.c 函数名没改还是console copy过来的代码
2. chapter15的代码不能直接跑, 因为ui_context多次定义, 建议改名或者注释运行

建议

1. 编译和链接报错就多看看cmake文件和头文件 根据报错信息去解决问题
2. 运行时报错就打断点一步步去debug
3. 不清楚api就去找官方文档
4. 多敲代码, 你懂了但并不一定能敲出来 这是两码事

正在回答

3回答

不错,先鼓掌。

0 回复 有任何疑惑可以回复我~
bennyhuo 2021-06-02 23:15:21

2. chapter15的代码不能直接跑, 因为ui_context多次定义, 建议改名或者注释运行

这个我本地能跑就没太注意,后面改下。

0 回复 有任何疑惑可以回复我~
bennyhuo 2021-06-02 23:14:17

有优化意识特别好。再次鼓掌👏🏻

不过是不是优化其实还是很多细节的,比如

1. 你多了频繁的内存释放和开辟,如果内存开辟和释放很昂贵(实际上往往如此,但
当然也不排除例外,这取决于标准库的实现),就是负优化了。

2. 单测文本我的没有什么可读性,主要原因在于我需要关注每一个字符输入以后屏幕上显示的是否与预期一致,不知道你改良的版本是否能实现这一点呢?

0 回复 有任何疑惑可以回复我~
  • 提问者 慕圣2430575 #1
    个人认为memcopy其实就是简化了内存申请,内存读取,内存设置这三步,因为内存不够的时候不可能还能copy成功,所以我就觉得是优化
    回复 有任何疑惑可以回复我~ 2021-06-03 19:49:15
  • bennyhuo 回复 提问者 慕圣2430575 #2
    memcopy不会影响内存地址,不存在申请和释放
    回复 有任何疑惑可以回复我~ 2021-06-03 20:37:24
  • 提问者 慕圣2430575 回复 bennyhuo #3
    嗯嗯 刚看了下代码 你两个计算模块都在初始化的时候申请了内存,memcopy只有两步了 复制与设置。
    
    如果我对 当前计算模块 与 历史计算模块 互换指针 
    并且清空 当前计算模块数据 的话是不是比memcopy更省性能,因为指针毕竟比数据小
    回复 有任何疑惑可以回复我~ 2021-06-03 20:47:32
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信