一貫していない構造体/共用体の宣言 (サイズの不一致)

一貫していないデータ宣言が見つかりました。

2 つのコンパイル単位で同じ名前の構造体または共用体が宣言されましたが、サイズが一致していません。通常、この問題は異なるパックオプションが使用されている場合に発生します。

ID

問題箇所

説明

1

定義

1 つ目の宣言

2

定義

2 つ目の宣言

file1.c:

#include <stdio.h>

// Declaration is processed here under normal packing rules
typedef struct MyPackedData
{
    char Data1;
    long Data2;
} st;

extern void SetData2(st *mystruct, long val);

int main(int argc, char **argv)
{
    st x;
    x.Data1 = 'a';
    x.Data2 = 2;

    printf("before call to SetData2(&x, 3), x.Data2=%d\n", x.Data2);

    SetData2(&x, 3);

    printf("after call to SetData2(&x, 3), x.Data2=%d\n", x.Data2);
    return 0;
}
        
file2.c:
          
    #pragma pack(push)  /* push current alignment to stack */
    #pragma pack(1)     /* set alignment to 1 byte boundary */

    // Declaration is processed here under pack(1) rules
    typedef struct MyPackedData
    {
        char Data1;
        long Data2;
    } st;

    #pragma pack(pop)   /* restore original alignment from stack */

    void SetData2(st *mystruct, long val) {
        mystruct->Data2 = val;
    }
        

© 2010 Intel Corporation. 無断での引用、転載を禁じます。