error C4996: 'setmode': The POSIX name for this item is deprecated解决方案

在使用VS2012编译zlib库官方提供的案例程序 zpipe.c 中代码时报错:
信息如下:

错误  1   error C4996: 'setmode': The POSIX name for this item is
 deprecated. Instead, use the ISO C++ conformant name:
  _setmode. See online help for details.    

解决方案:
將代码中的setmode函数用_setmode替换,fileno用_fileno替换。

即將下面代码

#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
#  include <fcntl.h>
#  include <io.h>
#  define SET_BINARY_MODE(file) setmode(_fileno(file), O_BINARY)
#else
#  define SET_BINARY_MODE(file)
#endif

替换为:

#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
#  include <fcntl.h>
#  include <io.h>
#  define SET_BINARY_MODE(file) _setmode(_fileno(file), O_BINARY)
#else
#  define SET_BINARY_MODE(file)
#endif

这样就可以编译通过了。

原文地址:https://www.cnblogs.com/lanzhi/p/6468976.html