2015-08-26 62 views
6

我正在尝试使用VS2015(C++控制台应用程序)创建一个UDP组播套接字程序。winsock不推荐使用警告

我有以下错误,

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

我试图通过 “工程” 符号添加_WINSOCK_DEPRECATED_NO_WARNINGS到我的项目设置 - > “属性” - > “配置属性” - > “C/C++” - >“预处理器” - >“预处理器定义” ..但它仍然表示相同。

然后我试图添加上述#包括符号 “stdafx.h中”

的#define _WINSOCK_DEPRECATED_NO_WARNINGS 1

然后否(/ 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后...宏。

在此先感谢。

+1

关于在'stdafx.h'之前添加'#define',你可能没有意识到这一点:https://en.wikipedia.org/wiki/Precompiled_header#stdafx.h。 '#include“stdafx.h”'应该是第一件事。如果在包含stdafx之后但在所有其他包含之前放置'#define',会发生什么? –

+0

它建立成功..非常感谢你的这些信息 – kar

回答

7

正如评论指出的,解决的办法是,以确保该行

#define _WINSOCK_DEPRECATED_NO_WARNINGS 

放置后

#include "stdafx.h" 

但其他#include语句之前。

+1

这对我有用。 – nomnom

1

尽管以前的建议有效,但它忽略了stdafx.h的用途。这个想法是,你为stdafx.h内部频率不变的的头文件放置#include语句,以便使用预编译头文件。因此,你应该把理想

#define _WINSOCK_DEPCRECATED 

stdafx.h,先于其他#include语句,它影响,特别是包括winsock2.h或其他的Winsock相关的报头之前。

相关问题