在ADS上发生的编译问题,是关于结构成员引用的

liuerna   2007-4-24 16:48 楼主
定义结构
    typedef struct
    {                              //字节位置
        uchar BootFlag;            // 0
        uchar StartCHS[3];         // 1 2 3
        uchar SystemID;            // 4
        uchar EndCHS[3];           // 5 6 7
        ulong RelativeSectors;     // 8 9 A B
        ulong TotalSectors;        // C D E F
    }PartTab_t;

当我访问tPartTab.RelativeSectorsr的时候,按照小端CPU的数据应该是字节BA98位置中的数据,可我在跟踪的时候引用数据的顺序却是7698

tPartTab.TotalSectors的字节顺序和位置也是错的

前面四个成员访问都是对的

请高人指点!



测试代码:
void fun (PartTab_t *tPartTab)
{
    uchar ucj;
    uchar *ucpTemp = (uchar*)tPartTab;

    for (ucj = 0; ucj < 16; ucj++) ucpTemp [ucj] = ucj;

    for (uci = 0; uci < 4; uci++)
    {
        printf ("    启动标志:%02X\n", tPartTab [uci].BootFlag);
        printf ("    分区类型:%02X\n", tPartTab [uci].SystemID);
        printf ("    相对扇区:%lu\n",  tPartTab [uci].RelativeSectors);
        printf ("    总扇区数:%lu\n",  tPartTab [uci].TotalSectors);
    }
}

回复评论 (2)

会不会是编译器自动给你按四个字节对齐了,你考律一下对齐看看...
点赞  2007-4-24 16:52
出错的成员变量在第8个字节上

我考虑过字节对齐的问题,但没有头绪
点赞  2007-4-24 17:00
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复