__attribute __((__ packed__))之间有什么区别;和#pragma pack(1)

时间:2015-08-25 16:02:50

标签: c++ linux windows pragma-pack

我正在移植一个在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中用于此属性?

1 个答案:

答案 0 :(得分:3)

__attribute__是GCC扩展,专门针对GCC(以及其他试图与GCC兼容的编译器)。

#pragma pack最初是Visual C ++编译器特定的扩展。正如评论者所指出的,它已经在GCC中实现,以及VC ++兼容性。

通常,您不能在另一个编译器中的一个编译器中使用扩展。例证:__attribute__在Visual C ++编译器中不作为扩展名存在。