打印

应该怎么写这个#define

[复制链接]
1073|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大道至简|  楼主 | 2014-7-16 08:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define DataBoad_Max_lenth 64
union DataBody
{
struct a aa;
struct b bb;
struct c cc;
unsigned char cells[DataBoad_Max_lenth]; //上面所有的结构都不能超过64字节
};


假设

sa=sizeof(struct a);

sb=sizeof(struct b);

sc=sizeof(struct c);

我想把#define DataBoad_Max_lenth更改成sa、sb、sc之中最大的那个数,应该怎么写这个#define

相关帖子

沙发
原野之狼| | 2014-7-16 09:01 | 只看该作者
照这个思路,无解。

sa=sizeof(struct a)是在编译的时候求解,因此预编译的时候不知道sa是多少。

使用特权

评论回复
板凳
shell.albert| | 2014-7-16 09:17 | 只看该作者
可以使用一个指针,
在32位机器下,void*占用4个字节,在64位下占用8个字节。
在编译的时候,动态申请内存,使用类似malloc()或new之类的,

使用特权

评论回复
地板
lxyppc| | 2014-7-16 09:24 | 只看该作者
楼主思路进死胡同了,想想union的本质

#define DataBoad_Max_lenth 1

使用特权

评论回复
5
dragon_hn| | 2014-7-16 09:38 | 只看该作者

struct a
{
        char test[12];
};

struct b
{
        char test[14];
};

struct c
{
        char test[15];
};

union DataBody_1
{
        struct a aa;
        struct b bb;
        struct c cc;
};

#define                DataBoad_Max_lenth        sizeof(DataBody_1)

union DataBody
{
        struct a aa;
        struct b bb;
        struct c cc;
        unsigned char cells[DataBoad_Max_lenth]; //ÉÏÃæËùÓеĽṹ¶¼²»Äܳ¬¹ý64×Ö½Ú
};

使用特权

评论回复
6
原野之狼| | 2014-7-16 12:43 | 只看该作者
dragon_hn 发表于 2014-7-16 09:38
struct a
{
        char test[12];

这个可行,规避了预编译期间求MAX的操作。

使用特权

评论回复
7
原野之狼| | 2014-7-16 12:54 | 只看该作者
/* not tested... */
typedef struct _foo {
    unsigned char addr[0];
    union {
        struct _bar1 bar1;
        struct _bar2 bar2;
        struct _bar3 bar3;
    } bar;
    #define BAR_SIZE sizeof(bar)   /* used for overflow check */
} Foo;

使用特权

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

本版积分规则

个人签名:看大道至简所著的《感悟设计》,感悟设计的至简大道

7556

主题

9507

帖子

18

粉丝