Вопрос: winsock не рекомендовал никаких предупреждений


Я пытаюсь создать программу сокета многоадресной передачи UDP, используя VS2015 (консольное приложение C ++).

Я получил следующую ошибку,

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 ++» -> «Препроцессор» -> «Определения препроцессора» - Но все же он говорит то же самое.

И затем я попытался добавить символ выше #include "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 ....

Заранее спасибо.


8


источник


Ответы:


Как отмечается в комментариях, решение состоит в том, чтобы убедиться, что линия

#define _WINSOCK_DEPRECATED_NO_WARNINGS

помещается после

#include "stdafx.h"

но перед другим #include заявления.


8



Хотя предыдущий совет работает, он игнорирует цель stdafx.h, Идея состоит в том, что вы размещаете #include инструкции для файлов заголовков, которые не меняются часто внутри   stdafx.h чтобы использовать предварительно скомпилированные заголовки. Поэтому вы должны идеально разместить

#define _WINSOCK_DEPCRECATED 

внутри stdafx.h, перед другими #include заявления, которые он затрагивает, в частности до включения winsock2.h или других заголовков, связанных с winsock.


1