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++ コンパイラ固有の拡張機能です。コメンターが指摘したように、VC++ との互換性のために GCC でも実装されています。

通常、あるコンパイラの拡張機能を別のコンパイラで使用することはできません。適切な例: __attribute__Visual C++ コンパイラの拡張機能として存在しません。

于 2015-08-25T16:06:38.120 に答える