C++安全编码:函数

本文介绍了C++中编写安全函数的一些原则,如数组参数需传入长度,避免在公共API中使用ASSERT,对const指针的使用,谨慎处理不可重入函数,检查字符串和指针参数是否为NULL,以及在函数开始时对参数进行ASSERT检查。强调了可重入函数的概念及其与线程安全的区别,并给出了相关示例。
摘要由CSDN通过智能技术生成

函数

数组作为函数参数时,必须同时将其长度作为函数的参数

由于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

可重入概念(简而言之是可以重复进入,异步信号安全):若一个程序或子程序可以“在任意时刻被中断然后操作系统调度执行另外一段代码,这段代码又调用了该子程序不会出错”,则称其为可重入(re

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值