5

我正在将在 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 中用于此属性?

4

1 回答 1

3

__attribute__是 GCC 扩展,特定于 GCC(以及其他试图与 GCC 兼容的编译器)。

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

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

于 2015-08-25T16:06:38.120 回答