web-dev-qa-db-fra.com

Winsock déconseillé aucun avertissement

J'essaie de créer un programme de socket de multidiffusion UDP à l'aide de VS2015 (application console C++).

J'ai eu l'erreur suivante,

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

J'ai essayé d'ajouter le symbole _WINSOCK_DEPRECATED_NO_WARNINGS à mes paramètres de projet via "Projet" -> "Propriétés" -> "Propriétés de configuration" -> "C/C++" -> "Préprocesseur" -> "Définitions du préprocesseur" .. Mais il dit toujours le même.

Et puis j'ai essayé d'ajouter le symbole ci-dessus # include "stdafx.h" like

# définir _WINSOCK_DEPRECATED_NO_WARNINGS 1

puis Non (/ sdl -) sur "Projet" -> "Propriétés" -> "Propriétés de configuration" -> "C/C++" -> Général -> Vérifications SDL

maintenant je reçois un message d'erreur disant

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

Enfin, j'ai essayé de mettre en œuvre

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

au lieu de

mreq.imr_multiaddr.s_addr = inet_addr(HELLO_GROUP);

J'ai besoin de comprendre pourquoi l'erreur n'a pas été résolue même après l'ajout de la macro _WINSOCK ....

Merci d'avance.

9
kar

Comme indiqué dans les commentaires, la solution consiste à s'assurer que la ligne

#define _WINSOCK_DEPRECATED_NO_WARNINGS

est placé après

#include "stdafx.h"

mais avant l'autre #include déclarations.

12
Aify

Bien que les conseils précédents fonctionnent, il ignore le but de stdafx.h. L'idée est que vous placez #include instructions pour les fichiers d'en-tête qui ne changent pas fréquemment à l'intérieurstdafx.h afin d'utiliser des en-têtes précompilés. Par conséquent, vous devriez idéalement placer

#define _WINSOCK_DEPCRECATED 

à l'intérieur stdafx.h, avant les autres #include les déclarations qu'elle affecte, notamment avant d'inclure winsock2.h ou d'autres en-têtes liés à Winsock.

2
Dunc