当我使用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);
}
答案 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 VS,cd
到msvs\geohash\Win32\Release
目录并运行编译器:
cl /Tp geohash.i