我正在将可以在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/