C语言学习总结

来源:互联网 发布:网络招投标系统 编辑:程序博客网 时间:2024/06/10 13:19

编译器

GNU  “GNU's Not Unix”

GCCGNU Compiler CollectionGNU编译器集合)  

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)命令查看二进制结构  nmnames )可以看函数名称

我的用法:objdump  -S 或者 -s  XXX(.exe 或者.o )   \   nm  XXX(.exe或者.o )

内容太多可以objdump  -S   XXX.exe   >   ./output.txt  

详细用法:objdump  -h \ nm  -h  或者linuxman  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


原创粉丝点击