主题 : __attribute__ ((packed))為何沒有作用 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 27334
精华: 0
发帖: 41
金钱: 205 两
威望: 41 点
综合积分: 82 分
注册时间: 2010-08-24
最后登录: 2018-07-15
楼主  发表于: 2010-11-24 17:48

 __attribute__ ((packed))為何沒有作用

各位好:
下列程式
#include <stdio.h>
#include <stdlib.h>

struct SS2
{ char On;
  float FV;  
}__attribute__ ((packed)) FS[10];

void modify(float *p)
{ static float fv=1.5;
  *p = fv;
  fv++;
}

int main(void)
{ short i;
  for(i=0;i<10;i++)
  { modify(&FS [ i ] .FV);
    printf("%02d->%05.2f\n",i,FS [ i ] .FV);
  }  
  return 0;
}
原本希望出現
/home # ./scale
00->01.50
01->02.50
02->03.50
03->04.50
04->05.50
05->06.50
06->07.50
07->08.50
08->09.50
09->10.50
結果出現是
00->00.00
01->00.00
02->00.00
03->04.50
04->00.00
05->00.00
06->00.00
07->08.50
08->00.00
09->00.00
顯然__attribute__ ((packed))沒有作用
參數如此下
root@aderho:/home/work/scale# make
/opt/toolchains/arm920t-eabi/bin/arm-linux-g++ -fsigned-char  -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/QtEmbedded-4.5.0/arm/o/mkspecs/qws/linux-arm-g++ -I. -I/usr/local/Trolltech/QtEmbedded-4.5.0/arm/o/include/QtCore -I/usr/local/Trolltech/QtEmbedded-4.5.0/arm/o/include/QtNetwork -I/usr/local/Trolltech/QtEmbedded-4.5.0/arm/o/include/QtGui -I/usr/local/Trolltech/QtEmbedded-4.5.0/arm/o/include -I. -I. -I. -o main.o main.cpp
/opt/toolchains/arm920t-eabi/bin/arm-linux-g++ -Wl,-O1 -Wl,-rpath,/usr/local/Trolltech/QtEmbedded-4.5.0/arm/o/lib -o scale main.o    -L/usr/local/Trolltech/QtEmbedded-4.5.0/arm/o/lib -lQtGui -L/opt/tslib/arm/o/lib -L/usr/local/Trolltech/QtEmbedded-4.5.0/arm/o/lib -lts -lQtNetwork -lQtCore -lz -lm -lrt -ldl -lpthread
有勞各位提供一點建議!

感謝!
[ 此帖被aderho在2010-11-30 16:06重新编辑 ]
级别: 新手上路
UID: 27334
精华: 0
发帖: 41
金钱: 205 两
威望: 41 点
综合积分: 82 分
注册时间: 2010-08-24
最后登录: 2018-07-15
1楼  发表于: 2010-11-30 16:05
级别: 新手上路
UID: 7073
精华: 0
发帖: 20
金钱: 100 两
威望: 20 点
综合积分: 40 分
注册时间: 2009-06-30
最后登录: 2018-02-16
2楼  发表于: 2010-11-30 17:54
你做不对齐的word操作,难道你的cpu不trap?迷惑