我正在将可以在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++编译器中不作为扩展名存在。

关于c++ - __attribute __((__ packed__))有什么区别;和#pragma pack(1),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59707472/

10-13 08:54