include: co/def.h.
#typedefs
#定长整数类型
co/def.h
定义了如下的 8 种整数类型:
typedef int8_t int8;
typedef int16_t int16;
typedef int32_t int32;
typedef int64_t int64;
typedef uint8_t uint8;
typedef uint16_t uint16;
typedef uint32_t uint32;
typedef uint64_t uint64;
这些类型在不同平台的长度是一致的,不存在可移植性问题。Google Code Style 建议除了 int,不要使用 short, long, long long 等内置整数类型。
#macros
#整型最大、最小值
MAX_UINT8 MAX_UINT16 MAX_UINT32 MAX_UINT64
MAX_INT8 MAX_INT16 MAX_INT32 MAX_INT64
MIN_INT8 MIN_INT16 MIN_INT32 MIN_INT64
这些宏分别表示 8 种整数类型的最大、最小值。
#DISALLOW_COPY_AND_ASSIGN
这个宏用于禁止 C++ 类中的拷贝构造函数与赋值操作。
- 示例
class T {
public:
T();
DISALLOW_COPY_AND_ASSIGN(T);
};
#__arch64, __arch32
64位系统上,__arch64
定义为 1;32位系统上,__arch32
定义为 1。
- 示例
#if __arch64
inline size_t murmur_hash(const void* s, size_t n) {
return murmur_hash64(s, n, 0);
}
#else
inline size_t murmur_hash(const void* s, size_t n) {
return murmur_hash32(s, n, 0);
}
#endif
#__forceinline
__forceinline 是 VS 中的关键字,放在函数定义开头,强制内联函数,linux 与 mac 平台用下面的宏模拟:
#define __forceinline __attribute__((always_inline))
#__thread
__thread 是 gcc/clang 中的关键字,用于支持 TLS,windows 平台用下面的宏模拟:
#define __thread __declspec(thread)
- 示例
// get id of the current thread
__forceinline unsigned int gettid() {
static __thread unsigned int id = 0;
if (id != 0) return id;
return id = __gettid();
}
#unlikely
这个宏用于分支选择优化,仅支持 gcc/clang。
- 示例
// 与 if (v == 0) 逻辑上等价,但提示编译器 v == 0 的可能性较小
if (unlikey(v == 0)) {
cout << "v == 0" << endl;
}