winsock弃用了没有警告

kar*_*kar 9 winsock visual-c++

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

我尝试通过"Project" - >"Properties" - >"Configuration properties" - >"C/C++" - >"Preprocessor" - >"Preprocessor definitions"将_WINSOCK_DEPRECATED_NO_WARNINGS符号添加到我的项目设置中.但它仍然说相同.

然后我试图添加符号上方的#include"stdafx.h中"

#define _WINSOCK_DEPRECATED_NO_WARNINGS 1

然后在"项目" - >"属性" - >"配置属性" - >"C/C++" - >"通用" - >"SDL"检查中" 否"(/ sdl-)

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

Warning C4603   '_WINSOCK_DEPRECATED_NO_WARNINGS': macro is not defined or definition is different after precompiled header
Run Code Online (Sandbox Code Playgroud)

最后我试着实施

inet_pton(AF_INET, HELLO_GROUP, (PVOID *)(&mreq.imr_multiaddr.s_addr));
Run Code Online (Sandbox Code Playgroud)

代替

mreq.imr_multiaddr.s_addr = inet_addr(HELLO_GROUP);
Run Code Online (Sandbox Code Playgroud)

我需要理解为什么即使在添加_WINSOCK ...宏之后错误也没有解决.

提前致谢.

Aif*_*ify 13

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

#define _WINSOCK_DEPRECATED_NO_WARNINGS
Run Code Online (Sandbox Code Playgroud)

放在后面

#include "stdafx.h"
Run Code Online (Sandbox Code Playgroud)

但在其他#include陈述之前.


小智 5

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

#define _WINSOCK_DEPCRECATED 
Run Code Online (Sandbox Code Playgroud)

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