Visual C++中不建议使用的命令

3
在使用Visual Studio 2013构建项目的解决方案时,我注意到以下引用出现了警告:

警告C4996:'gethostbyname':请改用getaddrinfo()或GetAddrInfoW(),否则定义_WINSOCK_DEPRECATED_NO_WARNINGS以禁用不推荐使用的API警告src\core\JCSocket.cpp 77 1
警告C4996:'inet_addr':请改用inet_pton()或InetPton(),否则定义_WINSOCK_DEPRECATED_NO_WARNINGS以禁用不推荐使用的API警告src\core\JCSocket.cpp 82 1
警告C4996:'inet_addr':请改用inet_pton()或InetPton(),否则定义_WINSOCK_DEPRECATED_NO_WARNINGS以禁用不推荐使用的API警告src\core\JCSocket.cpp 121 1
警告C4996:'inet_ntoa':请改用inet_ntop()或InetNtop(),否则定义_WINSOCK_DEPRECATED_NO_WARNINGS以禁用不推荐使用的API警告src\core\MuninNodeServer.cpp 64 1
警告C4996:'GetVersionExW':已被声明为过时的src\plugins\disk\DiskTimeMuninNodePlugin.cpp 48 1
警告C4996:'GetVersion':已被声明为过时的src\plugins\external\ConsolePipe.cpp 12 1
警告C4996:'GetVersionExW':已被声明为过时的src\plugins\PerfCounterMuninNodePlugin.cpp 56 1
警告C4996:'GetVersionExW':已被声明为过时的src\plugins\uptime\UptimeMuninNodePlugin.cpp 34 1

每当我尝试更改为推荐的IntelliSense命令时,它会显示:

IntelliSense:标识符“inet_ntop”未定义\src\core\MuninNodeServer.cpp 64 31


更多信息请参见: https://dev59.com/zVwY5IYBdhLWcg3wwqL1 - GuitarGirl
2个回答

3

1
我仍然会遇到错误,例如当我将inet_ntoa更改为inet_ntop时,新替换的命令未定义。我应该在哪里定义它? - Dean
@Dean 意思是你还是得到了相同的错误吗?如果是这样,使用 Ctrl + Shift + F 并在解决方案中搜索所有源文件中的 gethostnameinet_addrinet_ntoaGetVersionExWGetVersion。同时确保重新构建了代码,Ctrl + F7。 - Jonathan Mee
感谢您的提示,我尝试替换了一个,但仍然出现错误1:错误C3861:“inet_ntop”:找不到标识符\src\core\MuninNodeServer.cpp。 - Dean
@Dean,请查看我提供的链接,以替换每个函数。对于inet_ntop,您需要包含Ws2tcpip.h并链接到Ws2_32.lib/dll。 - Jonathan Mee
1
关于 GetVersionGetVersionEx,请查看 这个 stackoverflow 帖子。 - Chuck Walbourn
显示剩余3条评论

1
Visual Studio提醒您,您试图使用不安全的函数,这意味着包括函数体。函数体显然可能包含有符号溢出,并且存在其他编译错误的可能性,或者在较新的库中不受支持。顺便说一下,这与您如何使用此函数有关。

你可以通过添加以下行来禁用警告

只需简单地添加以下行即可禁用警告

#pragma warning( disable : 4996)

在您的代码顶部

这将禁用警告错误代码4996,并且可以正常工作而没有任何问题。

另一种方法:

  1. 解决方案资源管理器中右键单击项目,选择属性
  2. 导航到配置属性>>C/C++>>高级
  3. 在末尾禁用特定警告中放入4996,点击应用>>确定

注:我更喜欢使用代码方式,如果你不是在Visual Studio中编程或为自己的库制作头文件,这会更好学习


我认为你的答案不完整,你只提供了忽略警告的解决方案(我知道问题并不清楚)。问题可能在其他地方:例如使用更新版本的库(他说他遵循了建议,但它没有起作用)。但这只是我的看法。请编辑您的答案以删除一些粗体字,这将使其更易于阅读/理解。 - N0un
抱歉..我编辑了答案以使其更清晰 - user7667690

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接