1.指针如果有具体的指向,包括野指针,对应的合法性,我们是无法验证的。
2.所有的指针如果没有被直接使用,必须设置为NULL。
3.在函数内部,要验证指针的合法性,本质上是验证指针!=NULL。
4.自定义函数传入指针时不建议使用assert来检测,原因1:无法传入一个NULL指针。
原因2:只在debug下起作用。
5.指针越界不一定会报错。
6.程序退出之后内存泄漏问题就不存在了。
但是永远不会退出的程序,最害怕内存泄漏(操作系统,杀毒软件,服务器程序)。
7.用malloc申请空间,实际分配的空间比用户申请的空间大。同一种编译器,在同一种C语言标准下,多出来的空间是固定的。所以,如果要申请大的空间,建议使用动态内存开辟,如果申请小空间,建议在栈上开辟数组。
8.变量定义和语句中带空格。
9.逻辑密切的语句中不要带空格,不密切的带上空格。
10.复杂的函数,判断和分支结束的时候加上注释。
11.代码缩进一般4个空格。注释也要注意缩进。
12.用反义词组命名具有互斥意义的变量或者函数。
13.即便优先级确立了,但是仍然建议带上括号。特别是宏定义,一定要带上符号。
14.函数声明的时候,尽量把函数名带上。
15.函数参数命名要恰当,顺序要合理。
16.尽量不要省略函数的返回值。如果不需要返回值就空类类型(void)。
17.函数入口处对参数进行有效性检查,用if,或者assert(不推荐)。
18.函数的功能要单一,不要设计多用途的函数。
19.尽量避免函数有记忆功能(函数内尽量不要有static修饰的变量)。
20.尽量避免函数传入的参数过多。
21.尽量不要使用类型和数目不确定的参数。
22.函数传参的顺序是从右向左的。
23.
24.可变参数列表要有一个明确的参数。
25.在可变参数中,如果是短整型,一般都要进行int类型进行提升。
26.使用可变参数的时候,只能从第1个往后依次使用。
27.可变参数的底层设计和实现。
28.GetTickCount()获取电脑开机到现在累计的时间。
29.迭代(循环)和递归的比较,迭代法之所以用的时间少,是因为没有多余的函数调用,地规有大量的函数调用,而函数调用是需要成本的。