各位大大看看这段 c 代码有什么问题

2017-01-20 10:40:06 +08:00
 diangdiang

这段代码在 gcc 下可以通过,为什么声明数组的时候,数组大小可以是变量呢,一直都以为声明数组大小只能是常量,除了使用动态内存分配。

int fib(int n) {

if (n == 0)
    return 0;
if (n == 1)
    return 1;

int f[n+1];
int i;
f[0] = 0; f[1] = 1;
for (i = 2; i <= n; i++)
    f[i] = f[i-1] + f[i-2];
return f[n];

}

int main () {

int n = 9;
printf("fib number is %d\n", fib(n));
return 0;

}

3643 次点击
所在节点    程序员
29 条回复
langjiyuan
2017-01-20 13:10:38 +08:00
谭浩强+1
wohenyingyu02
2017-01-20 13:48:38 +08:00
想问问,如果吧 int n=9 去掉,从 main 第一个参数里赋值 int ,还能通过编译么……
congeec
2017-01-20 14:48:08 +08:00
@skydiver 准确的说是 C99 支持。 C11 成编译器可选项了
ovear
2017-01-20 14:49:43 +08:00
c99 的新特性哈哈哈, c prime plus 有讲 hhh
faywong8888
2017-01-20 20:05:59 +08:00
c99 标准特性
owt5008137
2017-01-21 02:32:21 +08:00
c99 的变长数组, gcc 支持但是 vc 不支持,现在很多教科书都是基于 vc ( 6 )的
这么搞如果 n 比较大容易爆栈
斐波那契数列可以用矩阵相乘把时间复杂度优化到 O(log(n))
amet
2017-01-21 10:53:40 +08:00
@diangdiang 似乎用到过, clang 好像是支持的。比较新的主流编译器都可以吧。
amet
2017-01-21 10:55:02 +08:00
@amet 补充一下,可能要用 `std=c99` 之类的参数指定一下。
ghSimon
2017-01-21 15:48:31 +08:00
只写 gcc -std=c89 默认不会关闭 gcc 的那些扩展,必须还要再加上-pedantic 表示严格参照 ISO C

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/335778

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX