下述代码用VC能编译通过,用ads1.2编译器则不行,错误提示:Serious error: C2432E: non-constant initialiser

car   2009-7-25 20:49 楼主
#define BYTE unsigned char
#define WORD unsigned short int

#define DWORD unsigned int
#define SDWORD signed int

#define SBYTE signed char
#define SWORD signed short int


static SWORD neg_pow2[17]={0,-1,-3,-7,-15,-31,-63,-127,-255,-511,-1023,-2047,-4095,-8191,-16383,-32767};
static DWORD start_neg_pow2=(DWORD)neg_pow2;

提示错误在最后一句  还望高手指教

回复评论 (6)

1>.static DWORD start_neg_pow2=(DWORD)neg_pow2[1];//一个值
2>.static DWORD *start_neg_pow2=(DWORD*)neg_pow2;//指针
点赞  2009-7-26 12:54
兄弟啊  找你那样改了还是不正确啊啊   

我又仔细研究了一下  start_neg_pow2 应该存放的是地址
后面有两处用到了汇编,都是这一句
mov ebx,[start_neg_pow2]
点赞  2009-7-28 11:20
把它定义成宏吧...
#define start_neg_pow2 (DWORD)neg_pow2
点赞  2009-7-28 12:58
static DWORD start_neg_pow2=(DWORD)neg_pow2
从语义上说没问题:neg_pow2是一个地址(32位的),这本身也是个值,可用赋值给另一个整型变量。

试试这样改:
你看看BYTE/DWORD/WORD的定义,翻翻VC/VS里面的预定义,试试改用typedef
typedef DWORD unsigned int

还有:
short本身就是关键字,不需要short int
点赞  2009-7-28 13:54
如果定义成这样就一点问题都没有...
static SWORD neg_pow2[17]={0,-1,-3,-7,-15,-31,-63,-127,-255,-511,-1023,-2047,-4095,-8191,-16383,-32767};
static SWORD * start_neg_pow2=neg_pow2;
点赞  2009-7-28 15:20
如果把你的文件扩展名,从"x.c"改成"x.cpp",你的代码也一点问题都没有....
点赞  2009-7-28 15:30
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复