gpt4 book ai didi

c - Gcc 4.8.2 默认编译和运行可变长度数组

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:25 25 4
gpt4 key购买 nike

在 C 编程中,我遇到过一种情况,我不小心初始化了一个可变大小的数组,但它起作用了。我做了一些研究,显然可以从 C99 编译中获得可变长度数组。显然,GCC 4.8.2 的默认编译选项是 C98。

这是我用来测试的代码:

#include "stdio.h"
#include "stdlib.h" // rand(), srand()
#include "time.h"

void printArray(const char* c) {
// impossible to get size of c because it returns pointer size
int array[sizeof(c)/sizeof(char)];
int i;
for(i=0; i<(sizeof(c)/sizeof(char))-1; i++) {
int fill=-1;
if(c[i]=='a')
fill = 0;
else if(c[i]=='b')
fill = 1;
array[i]=fill;
}
printf("contents of array in binary: \n");
for(i=0; i<(sizeof(c)/sizeof(char))-1; i++) {
printf("%d, ", array[i]);
}
printf("\n");
}

void printRandomArray() {
srand(time(NULL));
// variable length array is possible using C99
int array[rand()%10];
int i;
printf("contents of random array: \n");
for(i=0; i<(sizeof(array)/sizeof(int)); i++) {
array[i]=rand()%10;
printf("%d, ", array[i]);
}
printf("\n");
}

int main(int argc, char* argv[]) {
char c[]="abbabbabbaababababababb";
printArray(c);

printRandomArray();
return 1;
}

printRandomArray() 不应该工作,因为我使用默认的 GCC 4.8.2 编译,它是 C98 但它工作。谁能向我解释为什么会这样?

最佳答案

除了 C99 标准,GCC 还允许可变长度数组作为扩展:

6.19 Arrays of Variable Length .

Variable-length automatic arrays are allowed in ISO C99, and as an extension GCC accepts them in C90 mode and in C++.

据我所知,GCC 4.8.2 默认在 -std=gnu90 模式下编译代码。使用选项 -std=c89 编译它,您将看到大量警告和错误。

关于c - Gcc 4.8.2 默认编译和运行可变长度数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27880696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com