switch fall-through

来源:互联网 发布:it监控 编辑:程序博客网 时间:2024/04/30 11:36

最近看leveldb代码


util/hash.cc实现有这么一段代码


uint32_t Hash(const char* data, size_t n, uint32_t seed) {  // Similar to murmur hash  const uint32_t m = 0xc6a4a793;  const uint32_t r = 24;  const char* limit = data + n;  uint32_t h = seed ^ (n * m);  // Pick up four bytes at a time  while (data + 4 <= limit) {    uint32_t w = DecodeFixed32(data);    data += 4;    h += w;    h *= m;    h ^= (h >> 16);  }  // Pick up remaining bytes  switch (limit - data) {    case 3:      h += static_cast<unsigned char>(data[2]) << 16;      FALLTHROUGH_INTENDED;    case 2:      h += static_cast<unsigned char>(data[1]) << 8;      FALLTHROUGH_INTENDED;    case 1:      h += static_cast<unsigned char>(data[0]);      h *= m;      h ^= (h >> r);      break;  }  return h;}


// The FALLTHROUGH_INTENDED macro can be used to annotate implicit fall-through// between switch labels. The real definition should be provided externally.// This one is a fallback version for unsupported compilers.#ifndef FALLTHROUGH_INTENDED#define FALLTHROUGH_INTENDED do { } while (0)#endif

其实这个宏就是啥都不干的意思,之所以写这个宏,只是为了说明当前case执行完后,不break,而是fall throuth到下一个case里

FALLTHROUGH_INTENDED

原创粉丝点击