C语言学习总结
来源:互联网 发布:网络招投标系统 编辑:程序博客网 时间:2024/06/10 13:19
编译器
GNU “GNU's Not Unix”
GCC(GNU Compiler Collection,GNU编译器集合)
GNU 包含3个协议条款,
GPL:GNU通用公共许可证(GNU General Public License)
LGPL:GNU较宽松公共许可证(GNU Lesser General Public License), ),旧称GNU Library General Public License (GNU库通用公共许可证);
GFDL : GNU自由文档许可证(GNU Free Documentation License )的缩写形式。
源码:文档编辑-> gcc (GNU)编译器 -> 可执行文件
源码到可执行文件过程(即编译、链接、运行过程)
Gcc 命令参数 -E -S -c (-o)
.c --> .i --> .s --> .o --> a.out
预处理 编译 汇编 链接
更多gcc命令行参数:
gcc命令参数.doc
-------------------------------------------------结构部分----------------------------------------------------------
文件结构
源码文件结构
从上至下应该遵循
1头文件
2宏定义
3类型声明
4变量/函数声明
5 external(外部)函数实现(公有)
6 internal(内部)函数实现(私有)
可执行文件结构
通过 objdump (object dump)命令查看二进制结构 nm(names )可以看函数名称
我的用法:objdump -S 或者 -s XXX(.exe 或者.o ) \ nm XXX(.exe或者.o )
内容太多可以objdump -S XXX.exe > ./output.txt
详细用法:objdump -h \ nm -h 或者linux:man objdump \ man nm
心得:
想深入了解某个架构(例如 x86 和 arm)去分析可执行文件结构
否则还是别花太多时间在这里
数据结构
总结:占用不同大小的存储空间的数据,不同数据存储规则不一样
程序运行结构
顺序结构
自上而下,依次执行
分支结构
关键字:If switch
循环结构
while do while
分支结构+循环结构
关键字: for
-------------------------------------------------运用部分----------------------------------------------------------
C语言标准(参考网站http://ganquan.info/standard-c/)
标准库运用部分
<assert.h> 断言
<ctype.h> 字符类测试
<errno.h> (部分)库函数抛出的错误代码
<float.h> 浮点数运算
<limits.h> 检测整型数据类型值范围
<locale.h> 本土化
<math.h> 数学函数
<setjmp.h> “非局部跳转”
<signal.h> 信号
<stdarg.h> 可变参数列表
<stddef.h> 一些常数,类型和变量
<stdio.h> 输入和输出
<stdlib.h> 实用功能
<string.h> 字符串函数
<time.h> 时间和日期函数
心得和技巧
设计模式
工厂模式
心得:由于设计模式偏向对面向对象编程 而C语言面向过程 需要做一些思维转变,在设计结构体(抽象类)继承等等注意内存分配以及指针释放、类型转换等,其次函数指针重新赋值(重写),这种写发好处是封闭了结构体生成过程,只需要向工厂要所需的结构体类型即可。
抽象工厂模式
心得:有C语言面向对象思维,一系列工厂继承抽象工厂,重写对应的接口。和工厂模式比较 一个是生成对象,抽象工厂则是生成和操作通用类。
建造者模式
心得: 这种模式对于C语言实现起来不太友好,唯一的好处是输入的参数可以多样化,通 过一个通用的借口就可以完成多样化初始化实例,无需对原有的接口进行修改。
原型模式
心得: 原型模式提高了对象生成,结合工厂模式 ,在工厂生成时创建了一系列静态对象,加快了对象生成。对于越复杂的对象生成需要时间越长(进行构造函数),由于原型模式是针对内存操作,因此速度上会有优势。
单例模式
心得: 对象只生成 拿到的对象都是同一个。 “对象生成”行为分为饿汉和饥汉等,主要解决对象的生产和线程竞争问题。
适配器模式
心得:把两个不同的接口同一个通用的方法关联起来。
例如播放器1支持mp3,播放器2支持MP4,播放器1想把播放器2支持mp4的功能整合带自己部分,但是大家都不想动自己本身的代码结构(可能有其他模块依赖)因此播放器1支持mp4功能中间加一个适配器让这个功能更好的整合到播放器1里面。
在编程里面经常会用到 switch 或者if 区分他们之间的特征执行对应操作 这个if判断就是一个适配的过程
桥接模式
生成对象时候提供制定行为接口,将抽象部分与实现部分分离,使它们都可以独立的变化。
组合模式
通过容器装载子对象,只需要操作最顶层的对象(headmaster) 即可访问任何子对象(teacher student)
装饰模式
通过重写对应接接口,让接口在原来基础上赋予更多功能。
外观模式
作用:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
心得:make code beautiful
享元模式
心得:纯享元模式: 一个对象,不一样的部分让调用者确定(在对象创建时候),相同部分公用静态变量
复合享元模式
代理模式
一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。
例如手机厂商可以销售也可以生产,但是代理商只会销售,而且用不同销售方式,
最终达到销售目的,但是代理商不会生产手机。
职责链模式
用一个类似链表 设置他们下一个对象,每次消息都询问一次链表对象。这个和组合模式有点像。
命令模式
心得:把逻辑和操作分离
例如:
遥控器->发送命令->电视
遥控器只负责操作逻辑不管
电视只管逻辑 不负责操作
而中间就命令 就是建立他们两个之间的关系
作用: 调用者只操作"遥控器"接口即可无需关心他们实现,调用者负责控制部分开发,逻辑业务未实现情况下,整体系统也能正常进行,只是没有该命令(功能),而且可以预先把设计好的框架与业务接口结合起来(因为控制部已经设计好功能)。
解析器模式
心得:通过特定语法规则解释数据,让数据可视化(例如字符串解释加减乘除)
解释器接口让编程更偏向人性化。
作用:给一段内容(通常为字符串)->分析->然后输出预期结果
迭代器模式
中介模式
备忘录模式
观察者模式
状态模式
策略模式
模版模式
访问者模式
代码:
github:https://codeload.github.com/AnotherSeventeen/DesignPatterns_for_c/zip/master
- c语言学习总结
- C语言学习总结
- c语言学习总结
- C语言学习总结
- [学习总结】C语言
- C语言学习总结
- C语言学习总结
- 学习C语言总结
- C语言学习总结
- c语言学习总结
- C 语言学习总结
- C语言学习总结
- C语言学习总结
- C语言学习总结
- C语言学习总结
- C语言学习总结
- C语言学习笔记总结
- C语言学习一些总结
- 多态
- Java Classloader原理分析
- 谈谈分布式的通用问题
- shell编程
- SQL中的case when then else end用法
- C语言学习总结
- 删除Git提交记录
- HDU 5917:Ramsey定理
- 什么是面向对象对象,什么是面向过程,什么是面向对象思想。
- POJ 3518
- 深夜切题——PKKJ的生日礼物
- Java基础-为什么要抽象?
- Python入门记——模块的命名空间
- 安卓真机测试