GCC手册解析——变长数组
数组 解析 手册 gcc
2023-09-14 09:13:08 时间
本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。
GCC手册解析——变长数组
历史
可变数组是在ISO C99中引入的,GCC对其进行扩展在C90中也可以使用
变长数组的声明以及内存管理
可变数组的声明与常规数组声明一样,只不过将常量(constant expression)变成了一个变量。
......
char const_length_array[10]; //常规数组声明
int variable_length=10;
char variable_length_array[variable_length]; //变长数组声明
......
变长数组的内存是在变长数组声明时进行分配的,当超出作用范围(程序顺序执行、goto 或者 break等操作)时就自动回收内存
一个特殊情况就是,goto不能跳进有变长数组的code block,否则程序编译失败<详情可以参考我的这篇博文>
GCC还对其进行了扩展,在structure和union中可以定义变长数组作为数据成员
void
foo (int n)
{
struct S { int x[n]; };
}
也可以使用变长数组作为函数入参
/* case 1 */
void
tester (int len, char data[len][len])
{
/* … */
}
前置声明
/* case 2 */
void
tester (int len; char data[len][len], int len)
{
/* … */
}
上面的case 2也是GCC的一个扩展(ISO C99不支持此功能),如果你希望先传递数组再传递数组长度,那么可以使用case2的方法
分号前的‘int len’就是一个前置声明,主要目的是解析data声明时可以知道len的数据类型
前置声明没有数量限制,多个前置声明可以使用逗号或者分号分隔,但是最后一个前置声明必须以冒号(semicolon)结束,且紧邻一个真实的参数声明。
每一个前置声明都必须与一个真实的参数名称以及类型完全匹配
相关文章
- ☆打卡算法☆LeetCode 209. 长度最小的子数组 算法解析
- 前缀和与差分数组(附练习题)
- numpy的堆叠数组函数stack()、vstack()、dstack()、concatenate()函数详解
- c++ sort 二维数组排序_二维数组升序排列
- python 数组转换为字典_char转换为string
- hive 数组json解析
- java数组操作(二)
- 算法-数组中重复的数字详解编程语言
- Java getBytes()方法:获取字符串的字节数组
- Linux中如何输出数组元素(linux输出数组)
- php用数组返回无限分类的列表数据的代码
- PHP操作数组的一些函数整理介绍
- 解析PHP函数array_flip()在重复数组元素删除中的作用
- 解析将多维数组转换为支持curl提交的一维数组格式
- 解析数组非数字键名引号的必要性
- javalist与数组之间的转换详细解析
- js/jquery解析json和数组格式的方法详解
- DirectInfo.GetFiles返回数组的默认排序示例
- JavaScript中实现PHP的打乱数组函数shuffle实例
- Python列表list数组array用法实例解析
- C语言安全之数组长度与指针实例解析