【问题标题】:long long int compilation error in vc++ 6.0vc++ 6.0 中的 long long int 编译错误
【发布时间】:2010-12-26 07:23:47
【问题描述】:

我在编译一些旧的 VC++ 6.0 源代码时遇到了这个错误。

error C2632: 'long' followed by 'long' is illegal

有一部分代码声明了导致错误的 long long int 变量。有谁知道我可以如何解决在 VC++ 6.0 中编译它的这个错误?我四处搜索,发现此版本尚不支持此数据类型。但是,这是一个旧代码,我确信这是在 VC++ 6.0 中编译的。

【问题讨论】:

    标签: visual-c++ compiler-errors


    【解决方案1】:

    AFAIK Visual C++ 6.0 仅支持__int64(Microsoft 自己的 64 位整数类型定义)。 long long 是 C99 的标准类型,6.0 不支持。

    【讨论】:

      【解决方案2】:

      我认为 VC6 不支持 long long 数据类型,但如果您已经拥有必要的 typedef,您可以用“__int64”替换“long long”,并且最简单。

      【讨论】:

        【解决方案3】:

        错误 C2632:'long' 后跟 'long' 是非法的

        微软终于在Visual Studio 2013添加了对long longunsigned long long的支持。

        另见Which C99 features are available in the MS Visual Studio compiler?


        有人知道我如何在 VC++ 6.0 中修复这个错误吗?

        这个问题也存在于早期的 .Net 编译器中。您必须使用宏和 Microsoft 扩展以可移植的方式执行此操作。

        Crypto++ handles it 的方法如下(该项目仍然支持旧编译器以避免强迫用户做出不必要的选择):

        #if defined(_MSC_VER) || defined(__BORLANDC__)
            typedef unsigned __int64 word64;
            #define W64LIT(x) x##ui64
        #else
            typedef unsigned long long word64;
            #define W64LIT(x) x##ULL
        #endif
        

        然后你会use it like so。它适用于 VC++ 5.0/6.0、Visual Studio .Net、Visual Studio 2010、GCC、Clang、Intel 等。

        word64 x = W64LIT(0x0000000000000001);
        

        【讨论】:

        • 他们实际上至少从 VS2010 开始就有 long long,而不是 2013 年。根据 MSDN,拥有它的最早版本实际上是 VS 2005,它被列为等同于 __int64。它可能在 VS.NET 2003 中,但存档文档自相矛盾。 Here,图 1 没有提及,但图 2 有。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-08
        • 1970-01-01
        • 2010-12-22
        • 2016-07-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多