如何解决gcc错误生成
| 当我尝试编译包含以下两行的代码时,为什么gcc或clang都不会生成错误?int palindrome(char s[]){
char s2[strlen(s)];
我认为在这种情况下,您将不得不为s2动态分配内存。
解决方法
GCC对此行为进行了扩展,并且在C99中也是标准配置,称为可变长度数组。
http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html
由于GCC C和C99,Clang支持它:http://clang.llvm.org/compatibility.html#vla
, 第ѭ1节:
如果不存在大小,则数组类型为不完整的类型。如果
大小是
*
,而不是
是表达式,数组类型是可变长度数组类型
大小不明,
只能在带有函数原型的声明中使用
范围)这样的数组是
尽管如此,类型仍然完整。如果大小是整数常量表达式
和元素
类型具有已知的常量大小,数组类型不是变量
长度数组类型;
否则,数组类型为可变长度数组类型。
还有一个来自6.5.3.4
的例子:
#include <stddef.h>
size_t fsize3(int n)
{
char b[n+3]; // variable length array
return sizeof b; // execution time sizeof
}
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf(不是标准,而是草案,免费的。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。