Мультиплатформенное

В процессе работы над проектом потребовалось решить задачу обмена информацией с сервером. Для передачи данных по сети в реальном времени было решено использовать неблокируемый UDP сокет.

В настоящее время код проекта пишется на базе библиотеки SDL2, поэтому для работы с сокетами вначале было опробовано решение стороннего разработчика, связанное c основной библиотекой - SDL2_net. Увы, но некоторые особенности кода, проблемы с типами данных на разных платформах, заставили оказаться от его использования. Положительным моментом оказалось то, что пришлось тщательно изучить работу с сокетами на разных платформах. В итоге родились - небольшая мультиплатформенная библиотечка в виде одного заголовочного файла, в которой учитываются особенности разных операционных систем, и собственная реализация класса сокета. Все это получилось компактно, управляемо и быстро работает. Так что не всегда стоит слепо полагаться на готовые библиотеки, иногда бывает полезнее разобраться в деталях и написать собственную реализацию.

Кстати, о мультиплатформенных библиотеках. На хабре программисты обсуждали пример мультиплатформенного кода, и в одном из комментариев была высказана мысль, что для учета особенностей разных систем лучше создавать отдельные файлы - свой для каждой системы: proj_win.h, proj_mac.h, proj_nix.h и т.д., а не заполнять код макросами переходов к разным блокам в зависимости от системы (#if defined ... #elif ... #elif ... #endif).

Мое личное мнение - я не согласен. Код, обрабатываемый по-разному на разных платформах удобнее размещать в одном общем заголовочном файле. Причина в том, что когда пишешь програаму, то внося изменения и выполняя отладку для какой-то одной платформы очень легко, увлекшись, отложить на потом и забыть внести изменения в файлы для других платфом. А при использовании единого файла весь зависимый код всегда перед глазами и его гораздо удобнее править сразу для всех целевых платформ.