函数
数组作为函数参数时,必须同时将其长度作为函数的参数
由于C语言风格的数组,默认没有结束符,当读取数组时需要自己根据数组长度进行判断。(这个也是C/C++)比其他语言运行效率高的一点原因。
严禁对公共接口API函数的参数进行ASSERT操作
对于设计成API的函数,必须对参数进行合法性判断,严禁在API实现过程中产生CRASH。
ASSERT,第一会产生crash,release版本又无效;所以assert就显得没有意义。
不对内容进行修改的指针型参数,定义为const
如果参数是指针型参数,且内容不会被修改,请定义为const类型。
谨慎使用不可重入函数
不可重入函数在多线程环境下其执行结果不能达到预期效果,需谨慎使用。常见的不可重入函数包括:
rand, srand
getenv, getenv_s
strtok
strerror
asctime, ctime, localtime, gmtime
setlocale
atomic_init
tmpnam
mbrtoc16, c16rtomb, mbrtoc32, c32rtomb
gethostbyaddr
gethostbyname
inet_ntoa
可重入概念(简而言之是可以重复进入,异步信号安全):若一个程序或子程序可以“在任意时刻被中断然后操作系统调度执行另外一段代码,这段代码又调用了该子程序不会出错”,则称其为可重入(reentrant或re-entrant)的。即当该子程序正在运行时,执行线程可以再次进入并执行它,仍然获得符合设计时预期的结果。与多线程并发执行的线程安全不同,可重入强调对单个线程执行时重新进入同一个子程序仍然是安全的。
一个函数是可重入的,则该函数应当满足下述条件:
- 不能含有静态(全局)非常量数