Я портирую код, который отлично работает на Linux для Windows Visual C ++.
У меня есть этот код в Linux:
struct exif_desc
{
uint16_t tag;
uint16_t type;
uint32_t length;
uint32_t value;
}
__attribute__((__packed__));
Я получаю сообщение об ошибке в Windows:
'__packed__' : undeclared identifier
Мне интересно, могу ли я исправить эту ошибку с помощью
#pragma pack(1)
есть ли разница между ними? Есть ли синтаксис, который можно использовать в Linux и Windows для этого атрибута?
__attribute__
является расширением GCC, специфичным для GCC (и других компиляторов, которые пытаются быть совместимыми с GCC).
#pragma pack
изначально является специфическим расширением компилятора Visual C ++. Как отмечают комментаторы, он реализован в GCC и для совместимости с VC ++.
Обычно вы не можете использовать расширения в одном компиляторе в другом компиляторе. Дело в точке: __attribute__
не существует как расширение в компиляторе Visual C ++.