求助 sizeof使用的问题

[复制链接]
6961|7
 楼主| pentral2010 发表于 2010-5-11 11:11 | 显示全部楼层 |阅读模式
本帖最后由 pentral2010 于 2010-5-11 11:12 编辑

在.h文件定义
__packed typedef struct
{
INT8U d[5];
}__F1;
__packed typedef struct
{
INT8U d[5];
}__F2;
__packed typedef struct
{
INT8U d[5];
}__F3;
__packed typedef  struct
{
__F1 FF1;
__F2 FF2;
__F3 FF3;
}__ALL_TABLE_DEFINE;
在.c文件
#if (sizeof(__ALL_TABLE_DEFINE)>3 )
#error "very good"
#endif
编译器给出
#error : #59 :function call is not allowed in a constant expression  
在sizeof的原文件说,它可以测试数据 或类型的
但是这里就是不允许这样条用,不知道大伙有没碰到过
voidx 发表于 2010-5-11 11:49 | 显示全部楼层
#define __assert__(exp)  extern char __assert_data__[(exp) ? 1:-1]

__assert__(sizeof(__ALL_TABLE_DEFINE)<=3 ));

评分

参与人数 1威望 +1 收起 理由
pentral2010 + 1

查看全部评分

 楼主| pentral2010 发表于 2010-5-11 12:45 | 显示全部楼层
谢谢你的回答,我是在MDK-ARM 3.50上编译,
没查到__assert_data__关键字
这个是否跟编译器有关系的?
 楼主| pentral2010 发表于 2010-5-11 12:49 | 显示全部楼层
#if ( __assert__ (sizeof(__ALL_TABLE_DEFINE)<=3 ) )
                #error "ONEDATA_TER_LEN is too samll"
        #endif
编译器给出了 error :#18 :expected a ")"
voidx 发表于 2010-5-11 12:49 | 显示全部楼层
与编译器无关。

楼上试下
__assert__(1);
__assert__(0);
 楼主| pentral2010 发表于 2010-5-11 13:08 | 显示全部楼层
5# voidx

__assert__(0);
#94 the size of an array must be greater than zero
pkat 发表于 2010-5-11 20:56 | 显示全部楼层
应该和编译器是没有关系的
 楼主| pentral2010 发表于 2010-5-13 20:24 | 显示全部楼层
7# pkat

照例说是可以用的, 不知道是不是ST公司提供的库有问题,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

6

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部