3615|16

406

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

怎么调用特殊定义的结构体 [复制链接]

 
#define        A_SEQUENCE_OF(type)        A_SET_OF(type)

#define        A_SET_OF(type)                                        \
        struct {                                        \
                type **array;                                \
                int count;        /* Meaningful size */        \
                int size;        /* Allocated size */        \
                void (*free)(type *);                        \
        }

typedef struct IntersectionStateList {
        A_SEQUENCE_OF(struct IntersectionState) list;
} IntersectionStateList_t;

typedef struct IntersectionState {
        NodeReferenceID_t         intersectionId;
        IntersectionStatusObject_t         status;
        MinuteOfTheYear_t        *moy        /* OPTIONAL */;
        DSecond_t        *timeStamp        /* OPTIONAL */;
        PhaseList_t         phases;
} IntersectionState_t;

typedef struct SPAT {
        MsgCount_t         msgCnt;
        MinuteOfTheYear_t        *timeStamp        /* OPTIONAL */;
        DescriptiveName_t        *name        /* OPTIONAL */;
        IntersectionStateList_t         intersections;
} SPAT_t;       

我想使用SPAT_t结构体,但是当中的成员intersections的定义让我很困惑,不知道怎么调用A_SEQUENCE_OF?求大家支招。


此帖出自编程基础论坛

最新回复

替换就好,不特殊   详情 回复 发表于 2020-7-18 21:35

赞赏

1

查看全部赞赏

点赞 关注
 

回复
举报

951

帖子

1

TA的资源

纯净的硅(中级)

沙发
 
我觉得既然是宏,你就按照宏的定义原封不动的带进去,定义就明朗了,说实话这段程序怎么这么绕。。。
A_SEQUENCE_OF(type) ---- > A_SET_OF(type) --- >struct {                                        \
                type **array;                                \
                int count;        /* Meaningful size */        \
                int size;        /* Allocated size */        \
                void (*free)(type *);                        \
        }
---- >A_SEQUENCE_OF(struct IntersectionState) list; 其实就是:

struct {                                        \
                type **array;                                \
                int count;        /* Meaningful size */        \
                int size;        /* Allocated size */        \
                void (*free)(struct IntersectionState *);                        \
        } list;
此帖出自编程基础论坛
 
个人签名人有的时候真是奇怪,选择了会后悔,放弃了会遗憾,完美只能是一种理想,不是一种存在。
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

板凳
 
哎呀~~
又是这种 绕来绕去的东西,好吧,一个一个收拾吧.........

看来一根烟未必能解决啊......
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

4
 
差点忘了还要回家拿快递,先走......
因为这里头名字太多太长,原谅我,我随便用缩写替换了一下,先copy上来。。
对了,向我学习,做一个帖子里发代码 用 code 这个标签的好孩纸...........

尼玛........忘了我们公司是有加密的,根本复制不了......诶,算了,还好不多,回家玩吧

此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

5
 
下次发代码,记得用 CODE 这个标签啊~~
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

6
 
由于公司电脑加密,不能上代码,我截图
我把楼主的代码 copy 到 cb里试试。

一些没有的定义我去掉了,从代码看,应该与楼主的意图无关。



我考虑了一下楼主的意图。
你似乎,是想在 一个结构体的定义里 去 定义一个内部的 结构体定义。
(这让我怀疑楼主是否想用C模拟,或者模仿 Cpp的 类定义)。

我试了一下,却发现,无论是
list a;
还是
struct list b;
这种定义都是无法通过编译的。

我认为,楼主的宏写的是有问题的。

具体能否在结构体里做这种事,我稍后试试。

用我自己写的简单代码,一会贴图上来。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

7
 
在我弄我的代码之前,我只想问一个问题:

你这么做的意图是什么?
当然,如果只是觉得好玩,那~~很好~~
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

8
 
对了,下次贴代码,贴些简单的,没有什么 定义,声明依赖的。
你这个还是短的,要来点长的,我估计都没心情给你试。

我都没心情,那我估计就没几个人有心情了。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

9
 
结果出来,不知道是不是你想验证的东西。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

10
 

PS:如果你真的意图想在结构体的声明里  声明一个(只在这里产生作用的)子结构体声明,语法上是允许的。

我认为,你的那个宏定义应该出了问题。你也许可以,把结构体定义的名字 也带进 宏参数里。

记住,宏只是copy,千万不要把它当成函数什么的来用。

用你的宏定义,我尝试改一个,我就懒得再打开cb尝试了。
你可以验证验证。

  1. #define        A_SET_OF(type,name)                                        \
  2.         struct ##name##{                                        \
  3.                 type **##array##;                                \
  4.                 int count;        /* Meaningful size */        \
  5.                 int size;        /* Allocated size */        \
  6.                 void (*free)(##type## *);                        \
  7.         }
复制代码
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

11
 
见鬼,我刚刚才意识到,原来我也把 宏(参数)当成函数(参数)了

注意看我的代码里。
有 ## 这个 字符串连接符。

你不这样做,是没法通过编译的。

它只会直接把 type 复制过去的。

PS:这个##我用起来也是一知半解,是一个容易理解却不太容易用对的 预处理符号。
有时候如果编译失败,可以试试 #
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

406

帖子

1

TA的资源

一粒金砂(中级)

12
 
辛昕 发表于 2017-11-1 10:28
在我弄我的代码之前,我只想问一个问题:

你这么做的意图是什么?
当然,如果只是觉得好玩,那~~很好~~

就是一个协议 使用ASN编译器编译出来,编译出来的C文件中的结构体就是这样
此帖出自编程基础论坛
 
 
 

回复

406

帖子

1

TA的资源

一粒金砂(中级)

13
 
辛昕 发表于 2017-11-1 10:45
见鬼,我刚刚才意识到,原来我也把 宏(参数)当成函数(参数)了

注意看我的代码里。
有 ## 这个 字符 ...

十分感谢您的讲解
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

14
 
青城山下 发表于 2017-11-1 12:09
就是一个协议 使用ASN编译器编译出来,编译出来的C文件中的结构体就是这样

因吹丝挺,方便说说么?
是啥东东
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

406

帖子

1

TA的资源

一粒金砂(中级)

15
 
辛昕 发表于 2017-11-1 14:09
因吹丝挺,方便说说么?
是啥东东

能不能加您的qq?1160752275
此帖出自编程基础论坛
 
 
 

回复

106

帖子

0

TA的资源

一粒金砂(中级)

16
 
huixianfxt 发表于 2017-10-20 11:12 我觉得既然是宏,你就按照宏的定义原封不动的带进去,定义就明朗了,说实话这段程序怎么这么绕。。。 A_SE ...

这么是最正确的。。。楼下的瞎扯一大堆。。。

此帖出自编程基础论坛
 
 
 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

17
 

替换就好,不特殊

此帖出自编程基础论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表