Итак, сменил я на работе мандриву (32-бита) на арч (64-бита) и оказалось, что я не могу запустить демон, мониторящий состояние телескопа.
Данные передаются мультикастом в виде структуры длиной 1380 байт. Там используются всякие int'ы, поэтому я сделал вначале так:
#define int __int32_t
#define uint __uint32_t
Скомпилировал - но не тут-то было: размер структуры все равно больше: 1456 байт, а не 1380. Еще в структуре есть такие типы, как double (но он вроде бы не зависит от архитектуры), char (вроде, тоже не зависит), вложенные структуры, объединение из четырех uchar'ов и одного ulong'а (оно понятно - сейчас исправлю, но уж очень разница большая - что-то еще виновато), unsigned long (сейчас буду подправлять).
В чем может быть проблема? Может, выравнивание как-то не так выполняется?
Так и давай, по стандарту: int32_t. Переопределять ключевые слова - это же финиш. У тебя все стандартные функции, которые с интом работают, уже имеют право слететь.
По стандарту C - надо бить. Если хорошо понимают, что такое выравнивание полей структур, и умеют им управлять - то как бы и можно. Может, выйдет чуть быстрее. Но это всё равно привязка к платформе и лишняя морока, накой оно надо?
По вышепривёденной ссылке товарищ таки перешёл на работу с отдельными полями. А ТС по привычке предпочёл взять оттуда костылик для себя )
Алгоритм передачи мультикастов писал не я. И писался он 100500 лет назад. На него завязано такое количество сервисов, что нужно сказать так: серверная часть не обсуждается.