1

MicroChip のサンプル コードの 1 つで、このコードを見つけました。私はそれが何を意味するのか正確に理解できません

typedef struct __attribute__((packed))
{
    BYTE command;
    BYTE data;
} ACCESSORY_APP_PACKET;

ACCESSORY_APP_PACKET の別名が付けられた構造体が作成されていることは理解できますが、これは__attribute__((packed))どういう意味ですか? 関数として作り__attribute__ます。しかし、そうであれば、構造体としてどのように typedef されているのでしょうか?
BYTE は、Microchip によって作成された既知のデータ型です。

ありがとう。

4

3 に答える 3

3

__attribute__コンパイル時のコンパイラの個別の動作を指定するgccコンパイラ オプションです。

あなたの場合、構造体メンバー間にパディングを使用しないようにコンパイラーに指示します。

于 2013-03-28T10:25:18.253 に答える
2

これは typedef の一部ではなく、関数でもありません。おそらく「関数のように」見える構文を使用するコンパイラ拡張機能です。これは、構造体メンバーがメモリにパックされる方法を変更するために使用され、より高速に実行される可能性のある大きな方法でパックされるのではなく、最小限のスペースを使用します。

于 2013-03-28T10:25:56.060 に答える
0

いいえ、関数ではありません。これは属性です (これは GNU 拡張機能です)。構造体のメンバー間にパディングがあってはならないことを指定します (それ以外の場合は存在する可能性があります)。

于 2013-03-28T10:25:20.833 に答える