适配数组参数(Conformant Array Parameters)是否属于变长数组(VLA)?
聊聊CERT安全编码标准里的API05-C:适配数组参数
作为常年跟C代码打交道的开发者,我一直很看重CERT安全编码标准里的各项规则,其中API05-C:鼓励使用适配数组参数是我在日常开发中落实得最多的建议之一。
适配数组参数到底是什么?给大家举个直观的示例:
void foo(int length, char data[length]);
这种写法能让函数明确知晓传入数组的长度,比传统的char data[]或者char* data写法更安全、语义也更清晰。
我在大量项目代码里都应用了这个特性,不过考虑到部分老编译器不支持该特性,还专门写了宏来做兼容处理,确保代码在不同编译环境下都能正常运行。关于适配数组参数的更多细节,API05-C里有非常详尽的说明。
另外得提一句,很多编译器不支持变长数组(VLA)其实是有合理原因的——C11标准已经把变长数组从强制要求的特性降级为可选特性了,毕竟VLA在内存管理、栈溢出风险等方面确实存在不少问题,编译器厂商会根据自身定位和应用场景选择是否支持。
内容的提问来源于stack exchange,提问作者nemequ
相关产品推荐
相关产品推荐

