man*_*ans 6 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__));
Run Code Online (Sandbox Code Playgroud)
我在 Windows 上遇到错误:
'__packed__' : undeclared identifier
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以通过使用来修复此错误
#pragma pack(1)
Run Code Online (Sandbox Code Playgroud)
他们之间有什么区别吗?Linux 和 Windows 中是否有可用于此属性的语法?
__attribute__是一个 GCC 扩展,特定于 GCC(以及其他尝试与 GCC 兼容的编译器)。
#pragma pack最初是 Visual C++ 编译器特定的扩展。正如评论者所指出的,它也已在 GCC 中实现,以实现 VC++ 兼容性。
通常,您不能在一个编译器中使用另一个编译器中的扩展。恰当的例子:__attribute__在 Visual C++ 编译器中不作为扩展存在。
| 归档时间: |
|
| 查看次数: |
4267 次 |
| 最近记录: |