winsock 已弃用,没有警告

Posted

技术标签:

【中文标题】winsock 已弃用,没有警告【英文标题】:winsock deprecated no warnings 【发布时间】:2015-08-26 18:44:15 【问题描述】:

我正在尝试使用 VS2015(C++ 控制台应用程序)创建一个 UDP 多播套接字程序。

我收到以下错误,

Error   C4996   'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings mulitcast_listener

我尝试通过“项目”->“属性”->“配置属性”->“C/C++”->“预处理器”->“预处理器定义”将 _WINSOCK_DEPRECATED_NO_WARNINGS 符号添加到我的项目设置中 ..但它仍然说同样的话。

然后我尝试在 #include "stdafx.h" 上方添加符号 喜欢

#define _WINSOCK_DEPRECATED_NO_WARNINGS 1

然后No(/sdl-)在“项目”->“属性”->“配置属性”->“C/C++”->常规->SDL 检查

现在我收到一条错误消息,说

Warning C4603   '_WINSOCK_DEPRECATED_NO_WARNINGS': macro is not defined or definition is different after precompiled header

最后我尝试实现

inet_pton(AF_INET, HELLO_GROUP, (PVOID *)(&mreq.imr_multiaddr.s_addr));

而不是

mreq.imr_multiaddr.s_addr = inet_addr(HELLO_GROUP);

我需要了解为什么即使在添加 _WINSOCK... 宏后错误仍未解决。

提前致谢。

【问题讨论】:

关于在stdafx.h 之前添加#define,您可能没有意识到这一点:en.wikipedia.org/wiki/Precompiled_header#stdafx.h。 #include "stdafx.h" 应该是第一件事。如果您将 #define 放在包含 stdafx 之后但在所有其他包含之前会发生什么? 它构建成功.. 非常感谢您提供这些信息 【参考方案1】:

如 cmets 中所述,解决方案是确保该行

#define _WINSOCK_DEPRECATED_NO_WARNINGS

放在

之后
#include "stdafx.h"

但在其他 #include 语句之前。

【讨论】:

【参考方案2】:

虽然前面的建议有效,但它忽略了stdafx.h 的目的。这个想法是您将 #include 语句放置在不经常更改的头文件inside stdafx.h 以便使用预编译的头文件。因此,您应该理想地放置

#define _WINSOCK_DEPCRECATED 

stdafx.h 内部,在它影响的其他#include 语句之前,特别是在包含winsock2.h 或其他与winsock 相关的标头之前。

【讨论】:

以上是关于winsock 已弃用,没有警告的主要内容,如果未能解决你的问题,请参考以下文章

hstrerror() 的替换函数

Apple 警告 ITMS-90809:收到已弃用的 API 使用情况

警告 onRowClick 已弃用

GCKMediaInformation initWithContentID 已弃用警告

警告:'RaisedButton' 已弃用,不应使用。改用 ElevatedButton

如何修复“UIPopoverController 已弃用”警告?