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