C语言变长数组之剖析

C语言变长数组之剖析

ID:44208550

大小:117.23 KB

页数:7页

时间:2019-10-19

C语言变长数组之剖析_第1页
C语言变长数组之剖析_第2页
C语言变长数组之剖析_第3页
C语言变长数组之剖析_第4页
C语言变长数组之剖析_第5页
资源描述:

《C语言变长数组之剖析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C语言变长数组之剖析(陈云川ybc2084@163.comUESTC.CD)1、引言我们知道,与C++等现代编程语言不同,传统上的C语言是不支持变长数组功能的,也就是说数组的长度是在编译期就确定下来的,不能在运行期改变。不过,在C99标准中,新增的一项功能就是允许在C语言中使用变长数组。然而,C99定义的这种变长数组的使用是有限制的,不能像在C++等语言中一样自由使用。2、说明参考文献⑴中对变长数组的说明如下:C99givesCprogrammerstheabilitytousevariablelengtharrays,whichaie

2、arrayswhosesizesarenotknownuntilruntime・Avariablelengtharraydeclarationislikeafixedarraydeclarationexceptthatthearraysizeisspecifiedbyanon-constantexpression.Whenthedeclarationisencountered,thesizeexpressionisevaluatedandthearrayiscreatedwiththeindicatedlength,whichmustb

3、eapositiveinteger.Oncecreated,variablelengtharraycannotchangeinlength.Elementsinthearraycanbeaccesseduptotheallocatedlength;accessingelementsbeyondthatlengthresultsinundefinedbehaviorThereisnocheckrequiredforsuchout-of-rangeaccesses・Theanayisdestroyedwhentheblockcontaini

4、ngthedeclarationcompletes・Eachtimetheblockisstarted,anewarrayisallocated・以上就是对变长数组的说明,此外,在文献⑴中作者述说明,变长数组有以下限制:1、变长数组必须在程序块的范围内定义,不能在文件范围内定义变长数组;2、变长数组不能用static或者extern修饰;3、变长数组不能作为结构体或者联合的成员,只能以独立的数组形式存在;4、变长数组的作用域为块的范围,对应地,变长数组的生存吋间为当函数执行流退出变长数组所在块的时候;上述限制是最常见的一些限制因素,此外

5、,当通过typedef定义变长数组类型时,如何确定变长数组的长度,以及当变长数组作为函数参数时如何处理,作者也做了一一说明。详细的细节情况请参阅文献[1]。由于变长数组的长度在程序编译时未知,因此变长数组的内存空间实际上是在栈中分配的。gcc虽然被认为是最遵守C语言标准的编译器之一,但是它并不是严格按照ISOC标准规立的方式来实现的。gcc的实现方式采収了这样的策略:最大限度地遵守标准的规定,同时从实用的角度做自己的扩展。当然,gcc提供了编译选项给使用者以决定是否使用这些扩展功能。gcc的功能扩展分为两种,一种是gnu自己定义的语言扩

6、展;另外一种扩展是在C89模式中引入由C99标准定义的C语言特性。在参考文献⑵中,有关gcc的C语言扩展占据了将近120页的篇幅,扩展的语言功能多达几十个,由此可看出gcc的灵活程度。在参考文献⑵中,对变长数组的描述如下:Variable-lengthautomaticarraysareallowedinISOC99,andasanextensionGCCacceptstheminC89modeandinC++.(However,GCC'simplementationofvariable-lengtharraysdoesnotyetco

7、nformindetailtotheISOC99standard.)TheseaiTaysaredeclaredlikeanyotherautomaticarrays,butwithalengththatisnotaconstantexpression.Thestorageisallocatedatthepointofdeclarationanddeallocatedwhenthebracc-lcvclisexited.以上这段话并没有详细的说明gcc的变长数组实现和ISOC99的差异允竟体现在什么地方,但是从描述來看,基本上和文献⑴中

8、的描述是一-致的。文献⑵中没有说明而在文献⑴中给予了说明的几点是:变长数组是否能用static或者extern修饰;能否作为复合类型的成员;能否在文件域起作用。另外,在文献⑵中提到,采用alloca()函数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。