#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这个警告将不会出现。