下面的代碼在編譯時給出了這個錯誤我不明白爲什麼會發生這種情況。 switch語句的每一行都有這個錯誤。此代碼是從與g++
完美編譯的代碼中提取的,但我不明白gcc的問題。用gcc編譯時出錯
void
str_murmurhash3_x64_128 (const void * key, const int len,
const uint32_t seed, void * out)
{
const uint8_t * data = (const uint8_t*)key;
const int nblocks = len/16;
uint64_t h1 = seed;
uint64_t h2 = seed;
uint64_t c1 = BIG_CONSTANT(0x87c37b91114253d5);
uint64_t c2 = BIG_CONSTANT(0x4cf5ad432745937f);
//----------
// body
const uint64_t * blocks = (const uint64_t *)(data);
int i;
for(i = 0; i < nblocks; i++)
{
uint64_t k1 = getblock(blocks,i*2+0);
uint64_t k2 = getblock(blocks,i*2+1);
k1 *= c1; k1 = ROTL64(k1,31); k1 *= c2; h1 ^= k1;
h1 = ROTL64(h1,27); h1 += h2; h1 = h1*5+0x52dce729;
k2 *= c2; k2 = ROTL64(k2,33); k2 *= c1; h2 ^= k2;
h2 = ROTL64(h2,31); h2 += h1; h2 = h2*5+0x38495ab5;
}
//----------
// tail
const uint8_t * tail = (const uint8_t*)(data + nblocks*16);
uint64_t k1 = 0;
uint64_t k2 = 0;
switch(len & 15)
{
case 15: k2 ^= uint64_t(tail[14]) << 48;
case 14: k2 ^= uint64_t(tail[13]) << 40;
case 13: k2 ^= uint64_t(tail[12]) << 32;
case 12: k2 ^= uint64_t(tail[11]) << 24;
case 11: k2 ^= uint64_t(tail[10]) << 16;
case 10: k2 ^= uint64_t(tail[ 9]) << 8;
case 9: k2 ^= uint64_t(tail[ 8]) << 0;
k2 *= c2; k2 = ROTL64(k2,33); k2 *= c1; h2 ^= k2;
case 8: k1 ^= uint64_t(tail[ 7]) << 56;
case 7: k1 ^= uint64_t(tail[ 6]) << 48;
case 6: k1 ^= uint64_t(tail[ 5]) << 40;
case 5: k1 ^= uint64_t(tail[ 4]) << 32;
case 4: k1 ^= uint64_t(tail[ 3]) << 24;
case 3: k1 ^= uint64_t(tail[ 2]) << 16;
case 2: k1 ^= uint64_t(tail[ 1]) << 8;
case 1: k1 ^= uint64_t(tail[ 0]) << 0;
k1 *= c1; k1 = ROTL64(k1,31); k1 *= c2; h1 ^= k1;
};
//----------
// finalization
h1 ^= len; h2 ^= len;
h1 += h2;
h2 += h1;
h1 = fmix(h1);
h2 = fmix(h2);
h1 += h2;
h2 += h1;
((uint64_t*)out)[0] = h1;
((uint64_t*)out)[1] = h2;
}
以下是th錯誤,錯誤中指定的所有行號對應於開關櫃內的行。
murmurhash3.c:103:18: error: expected expression before ‘uint64_t’
murmurhash3.c:104:18: error: expected expression before ‘uint64_t’
murmurhash3.c:105:18: error: expected expression before ‘uint64_t’
murmurhash3.c:106:18: error: expected expression before ‘uint64_t’
murmurhash3.c:107:18: error: expected expression before ‘uint64_t’
murmurhash3.c:108:18: error: expected expression before ‘uint64_t’
murmurhash3.c:109:18: error: expected expression before ‘uint64_t’
murmurhash3.c:112:18: error: expected expression before ‘uint64_t’
murmurhash3.c:113:18: error: expected expression before ‘uint64_t’
murmurhash3.c:114:18: error: expected expression before ‘uint64_t’
murmurhash3.c:115:18: error: expected expression before ‘uint64_t’
murmurhash3.c:116:18: error: expected expression before ‘uint64_t’
murmurhash3.c:117:18: error: expected expression before ‘uint64_t’
murmurhash3.c:118:18: error: expected expression before ‘uint64_t’
murmurhash3.c:119:18: error: expected expression before ‘uint64_t’
任何幫助表示讚賞。
謝謝!有效。是的,我想要一個破解行爲 –
,但現在編譯器正在給予制止 'murmurhash3.c:104:45:警告:不使用計算出的值[-Wunused-value] '。爲什麼這個警告來了? –
你確定嗎?我用'-std = c99 -Wall -pedantic'編譯沒有問題。 – dirkgently