Windows 7中的一些奇怪的C编译错误

时间:2016-09-13 05:51:20

标签: c visual-c++

当我使用VS 2013(Windows版Redis)编译以下方法geohash_move_x时,它给出了很多错误,例如下面的内容,但是这个问题恰好发生在 win7 ,在 win10 没有错误。

  

错误188错误C2275:“uint64_t”:此表达式是非法的

     

错误189错误C2146:语法错误:缺少“;”

     

错误190错误C2065:“x”:未声明的标识符

static void geohash_move_x(GeoHashBits *hash, int8_t d) {
if (d == 0)
    return;

uint64_t x = hash->bits & 0xaaaaaaaaaaaaaaaaULL;
uint64_t y = hash->bits & 0x5555555555555555ULL;

uint64_t zz = 0x5555555555555555ULL >> (64 - hash->step * 2);

if (d > 0) {
    x = x + (zz + 1);
} else {
    x = x | zz;
    x = x - (zz + 1);
}

x &= (0xaaaaaaaaaaaaaaaaULL >> (64 - hash->step * 2));
hash->bits = (x | y);

}

enter image description here

1 个答案:

答案 0 :(得分:0)

我建议您调查geohash.c文件的预处理器输出,并将其与VS 2013和VS2015(或Win 7和VS2013 Win 10上的VS2013)进行比较。可能它会给你一个答案,为什么编译器有uint64_t类型的问题。

要配置VS以输出预处理文件,请转至geohash - > geohash.c文件并打开属性页。将生成预处理文件属性修改为。在您的产品中, Debug 解决方案配置构建 Release 配置,因此请谨慎更改正确项目配置中的选项。或者为所有人做这件事。

如果配置完好,您将在以下位置找到预处理文件:

msvs\geohash\Win32\Release\geohash.i

在问题调查期间,您可能需要编译geohash.i。打开Developer Command Prompt for VScdmsvs\geohash\Win32\Release目录并运行编译器:

cl /Tp geohash.i