Есть ли в компиляторе какой-либо флаг для предварительной компиляции только IPV6

#ipv6

#ipv6

Вопрос:

Я написал код для реализации IPv6, используя настройку флага. Флаг должен быть установлен в файле заголовка перед процессом компиляции, если мне нужно включить часть IPv6. Есть ли какой-либо флаг, предоставляемый самим компилятором, чтобы мне просто нужно было использовать инструкцию #ifdef COMPILER_FLAG_FOR_IPV6 для включения части кода IPv6. Если нет, то часть IPv4 скомпилирована. Я не хочу вручную определять флаг здесь, а использовать встроенный флаг для IPV6.

Комментарии:

1. Какая операционная система? Я не могу сказать, что делает Visual Studio, но в операционных системах в стиле Unix компилятор не знает такого рода информации как таковой — для этого существуют autoconf и friends.

Ответ №1:

Совместимость с IPv6 зависит не от поддержки компилятора, а от файлов заголовков, специфичных для конкретной операционной системы. Стандартного способа проверить это как такового не существует. (Как было указано, вы, вероятно, захотите, чтобы CMake / AutoConf / какая-либо другая система сборки обнаружила это).

Вы также можете достичь того, что, по-видимому, ищете более напрямую, например, в Linux вы, вероятно, можете сделать:

 #include <sys/socket.h>
#ifdef AF_INET6
....
#endif
  

Я не уверен, что хотел бы делать ставку на то, насколько это переносимо / надежно, хотя, я бы предположил, что это будет работать с любой реализацией sys/socket.h , winsock2.h и при беглом просмотре #define кажется, что это тоже похоже на AF_INET6 оф-вф.

Комментарии:

1. @awoodland… Здесь, если я использую определенный мной макрос, например #define ENABLEIPv6 1, тогда код работает нормально. Но, если я использую макрос AF_INET6, который определен в sys / socket.h . Даже после включения этого файла заголовка во все места, код выполняется некорректно. Он застревает в части «connect» программирования сокетов. Я что-то упускаю? Пожалуйста, подскажите, если что-то не так или необходимо предпринять какие-либо другие меры.

2. я предполагаю, что вы #include где-то пропустили, что означает, что AF_INET6 не будет определено, и поэтому вы, возможно, будете смешивать аргументы странным образом.

3. @awoodland…. Я проверил все места. Там включен #include <sys/socket.h>. Теперь я не понимаю, в чем может быть причина. Я не понимаю причину, по которой застрял в функции connect.

4. Есть какая-либо информация об отладке? Вывод из strace может быть релевантным / полезным для выяснения причины его зависания.

5. Из трассировок я могу просто подтвердить, что функция connect не работает