#pragma warning(push)是保存当前的编译器警告状态;
#pragma warning(pop)是恢复原先的警告状态。
例如:rocksdb中的一段代码
#if defined(_MSC_VER)
#pragma warning(push)
#pragma warning(disable : 4244) # 禁止compiler警告
// varint32编码
char* EncodeVarint32(char* dst, uint32_t v) {// Operate on characters as unsignedsunsigned char* ptr = reinterpret_cast<unsigned char*>(dst);static const int B = 128;if (v < (1 << 7)) {*(ptr++) = v;} else if (v < (1 << 14)) {*(ptr++) = v | B;*(ptr++) = v >> 7;} else if (v < (1 << 21)) {*(ptr++) = v | B;*(ptr++) = (v >> 7) | B;*(ptr++) = v >> 14;} else if (v < (1 << 28)) {*(ptr++) = v | B;*(ptr++) = (v >> 7) | B;*(ptr++) = (v >> 14) | B;*(ptr++) = v >> 21;} else {*(ptr++) = v | B;*(ptr++) = (v >> 7) | B;*(ptr++) = (v >> 14) | B;*(ptr++) = (v >> 21) | B;*(ptr++) = v >> 28;}return reinterpret_cast<char*>(ptr);
}
#if defined(_MSC_VER)
#pragma warning(pop) # 恢复compiler警告
#endif
这样在编译 varint32编码 部分的代码时,4244这个警告将不会出现。