c语言学习笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
网络通讯中数据大小端的问题:
大端模式:高位字节放在内存的低地址端,即该值的起始地址;低位字节排放在内存的高地址端。
小端模式:低位字节放在内存的低地址端,即该值的起始地址;高位字节放在内存的高地址端。
数组的名字是一个常量指针,如X【2】,X是一个常量指针,没有分配的内存。
数据存在存储空间,数值不存在。
在C语言里,指针可以访问到任何地方,但是对不应该访问的地址进行访问没有意义,也可能会禁止读写。
函数的接口类型,可变参数的类型和执行跳转:
C语言的函数名可以看做一个地址常量(和数组一样)。
系统的堆栈:堆和栈的第一个区别就是申请方式不同:栈(英文名称是stack)是系统自动分配空间的,例如我们定义一个char a;系统会自动在栈上为其开辟空间。而堆(英文名称是heap)则是程序员根据需要自己申请的空间,例如malloc(10);开辟十个字节的空间。由于栈上的空间是自动分配自动回收的,所以栈上的数据的生存周期只是在函数的运行过程中,运行后就释放掉,不可以再访问。而堆上的数据只要程序员不释放空间,就一直可以访问到,不过缺点是一旦忘记释放会造成内存泄露。、
、
预处理操作:
宏定义:#define M 3; #define M(x,y) 2*x+y;
预处理对宏的处理,分为3类:
预处理“标识符”的展开;
预处理“标识符”的判断;
预处理“标识符”的文本替换。
#if 0
。。。。
#endif
用作代码注释。
基础类型重定义:一个C程序在PC上开发,逻辑验证正确后,下需要移植到某个嵌入式系统中,但是它们对应的int的位宽定义不同,目标系统是X86时,编译器将其看做32位,而目标系统为嵌入式系统的时候,编译器将其看作16位(对应的32位为long关键词)。这种情况,就需要进行基础类型的重定义:
#define _TARGET_X86_SYSYTEM 0
#define _TARGET_DEV_SYSYTEM 1
#define _TARGET_SYSYTEM _TARGET_X86_SYSYTEM
#if(_TARGET_SYSYTEM = _TARGET_X86_SYSYTEM)
Typedef signed int _i32
Typedef unsigned int _u32
#elif(_TARGET_SYSYTEM = _TARGET_DEV_SYSYTEM)
Typedef signed long _i32
Typedef unsigned long _u32
#enif
这样,就只需要对_TARGET_SYSYTEM重新修改就可以完成程序代码中32位宽的整型的定义。
C语言编程规范:
1.流程控制语句必须用大括号包含起来,if、for、do、while、case、switch、default 等语句自占一行,且if、for、do、while 等语句的执行语句无论多少行都要加大括号{}
2.不要使用难懂的技巧性很高的语句,除非很有必要时。高技巧语句不等于高效率的程序,实际上程序的效率关键在于算法。
3.去掉没有必要的公共变量
4.仔细定义并明确公共变量的含义、作用、取值范围及公共变量
5.明确公共变量与操作此公共变量的函数数或过程的关系,如访问、修改及创建等。
6.当向公共变量传递数据时,要十分小心,防止赋予不合理的值或越界等现象发生。
7.防止局部变量与公共变量同名
8.严禁使用未经初始化的变量作为右值
9.构造仅有一个模块或函数可以修改、创建,而其余有关模块或函数只访问的公共变量,防止多个不同模块或函数都可以修改、创建同一公共变量。
10.使用严格形式定义的、可移植的数据类型,尽量不要使用与具体硬件或软件环境关系密切的变量。
11.结构的功能要单一,是针对一种事务的抽象。
12.不要设计面面俱到、非常灵活的数据结构。
13.不同结构间的关系不要过于复杂。
14.结构中元素的个数应适中。若结构中元素个数过多可靠率依据某种原则把元素组成不同的子结构,以减少原结构中元素的个数
15.仔细设计结构中元素的布局与排列顺序,是结构容易理解、节省占用空间,并减少引起误用现象。
16.结构的设计要尽量考虑向前兼容和以后的版本升级,并为某些未来可能的应用保留余地。
17.留心具体语言及编译器处理不同数据类型的原则及有关细节
18.编程时,要注意数据类型的强制转化。
19.对编译系统默认的数据类型转化,也要有充分的认识。
20.尽量减少没有必要的数据类型默认转换与强制转换。
21.合理地设计数据并使用自定义数据类型,避免数据间进行不必要的类型转化。
22.对自定义数据类型进行恰当命名,使它成为自描述性的,以提高代码可读性。注意命名方式在同一项目中的统一性。
23.当声明用于分布式环境或不同CPU 间通信环境的数据结构时,必须考虑机器的字节顺序、使用的位域及字节对齐等问题。
24.一个函数仅完成一个功能。
25.为简单功能编写函数。
26.不要设计多用途而面面俱到的函数。
27.尽量不要编写依赖其它函数内部实现的函数。