Атрибут __atribute__((упакованный)) не привязан к GCC
Я использую __attribute__((packed));
сделать предметы из struct
храниться в памяти за другим, так как это важно для некоторых низкоуровневых разработок.
Как __attribute__((packed));
Конкретно для GCC интересно, есть ли подобное решение, которое работает на ВСЕХ компиляторах ANSI/C89/C99/C11 или хотя бы на некоторых из них.
2 ответа
Не существует стандартного подхода для достижения __attribute__((packed))
делает. Типичным решением является использование #ifdef
Для обработки разных компиляторов. Вы можете найти несколько решений для этого подхода в этой публикации SO, которая также содержит подробную информацию о Visual C++ эквиваленте __attribute__((packed))
, Кроме того, GCC поддерживает прагмы структурной упаковки Windows, поэтому, если вы просто заинтересованы в Windows и GCC, вы можете просто использовать подход Windows.
Отсутствует поддержка функций для управления структурой, определенной стандартом. Стандарт просто утверждает, что этот аспект определяется реализацией.
Поэтому, если вам нужно управлять компоновкой, вам нужно будет использовать специальные функции компилятора. Если вы можете найти способ избежать необходимости делать это вообще, это было бы предпочтительнее.