【问题标题】:How to declare a long long int array in C90如何在 C90 中声明一个 long long int 数组
【发布时间】: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]

标签: c c89


【解决方案1】:

除非你能找到一些非标准的预处理器扩展,否则你不能在 C90 中使用long long

如果你幸运的话,编译器实现了stdint.h,你可以在其中找到int64_t。一些 C90 编译器(如 Visual Studio 2017)会这样做。

鉴于免费提供出色的 C99 或 C11 编译器,对于许多不同的系统,应该没有理由坚持使用 C90。

【讨论】:

  • 如果一个项目使用特定的 C 实现,那么这个事实本身可能是继续使用该实现的一个很好的理由。
猜你喜欢
  • 1970-01-01
  • 2016-09-12
  • 2013-08-17
  • 2019-03-10
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多