【发布时间】:2018-10-06 14:43:07
【问题描述】:
我的 C90 编译器有问题,因为它在 long long int 中显示错误。我想声明一个 long long int 类型的数组。
有没有其他方法可以用C90编译它?
这是我的代码:
#include<stdio.h>
int main()
{
int i,n,j,X;
long long int N[60];
N[0]=0;
N[1]=1;
for(i=2;i<61;i++)
{
N[i]=N[i-1]+N[i-2];
}
scanf("%d",n);
for(j=0;j<n;j++)
{
scanf("%d",X);
printf("Fib(%d) = %lld",X,N[X]);
}
}
【问题讨论】:
-
简短的回答是你不能,除非你的 C90 编译器支持
long long或者支持 64 位整数类型作为扩展。只有少数现实世界的 C90 编译器会这样做——但所有 C99 编译器都会这样做。或者,获取支持更大整数类型的第三方库(但是,在 C 中,这些将涉及所有数学运算的一组不同的 API 函数,而不是仅使用+进行加法)。此外,即使您可以找到一个编译器来接受它,第一个循环也会运行到数组的末尾,因此可能会崩溃。经典的“减一”错误。 -
@Peter:20 世纪编译器对“long long”的支持可能是有限的,但尤其是在嵌入式世界中,可能有相当数量的编译器支持某些 C99 特性而不是完全 C99-合规。
-
此外,在定义
long long int N[60];之后,您有 60 个元素:N[0], ...N[59]。您的循环尝试访问N[60]。