打印

求助 sizeof使用的问题

[复制链接]
5631|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 ")"

使用特权

评论回复
5
voidx| | 2010-5-11 12:49 | 只看该作者
与编译器无关。

楼上试下
__assert__(1);
__assert__(0);

使用特权

评论回复
6
pentral2010|  楼主 | 2010-5-11 13:08 | 只看该作者
5# voidx

__assert__(0);
#94 the size of an array must be greater than zero

使用特权

评论回复
7
pkat| | 2010-5-11 20:56 | 只看该作者
应该和编译器是没有关系的

使用特权

评论回复
8
pentral2010|  楼主 | 2010-5-13 20:24 | 只看该作者
7# pkat

照例说是可以用的, 不知道是不是ST公司提供的库有问题,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

6

帖子

1

粉丝