1.不要return堆栈区域的内存,很危险
2.数组越界,编译器不检查,有时可利用这个特点
3.内存泄露问题要注意
4.C编译器的词法分析是最左贪婪算法
5.*是取内容的意思有助于理解定义时的一些问题
6.char在缺省的情况下,不同编译器是不同的,通常在arm的编译器下是unsigned,大多情况下是signed的,其他关键字
在缺省情况下是signed
7.在取数据时,如果定义的数据位数大于你取数据时的位数,要注意大端、小端模式(大端模式是低地址保存高位数据,
小端模式是低地址保存低位数据)
8.无参,无返回值的函数最好写上void,否则可能会出问题,没写void的函数是能返回一个值的,这个值是一个随机的值
9.分号很重要,起分割语句的作用
10.switch case 语句里每个case都要加break否则会“漏”,即程序会一直往下执行,不加的话需要注释一下是利用这个
特点的编程
11.goto语句只有当满足下面的情况时才可被使用:
①goto语句只能用于跳出一个复杂的语句块,决不能用于跳进一个语句块中
②goto语句跳转的目的地最好是相同的
③当使用goto语句能让你的代码更容易理解的时候使用
12.变量只可能在三个地方:主存、堆栈、寄存器(保存在堆栈和寄存器中的是临时变量,保存在主存中的是全局、静态变
量)
13.编译器一次只编译一个C文件忽略其他的C文件内容,不会同时进行编译
14.被static了的东西就不能被extern了,只能在定义它的C文件中使用,不能用在别的C的文件中
15.一个好的软件架构是内部复杂而接口简单
16.双目运算符在同等优先级下是自左向右结合(除了赋值运算符),单目运算符在同等优先级下是自右向左结合,三目运
算符也是自右向左
17.不要把不同的数据类型放在运算符两边做计算,最好使用同类型的数据否则就进行强制数据类型转换(由于C语言运算
符会使用通用算数转化即把运算符两边的数据转换成相同类型的数据再进行计算,转换优先级为double>float>unsigned
long>long>unsigned int>int)