| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 11311 人关注过本帖
标题:有没有能自动获取结构体成员数量的方法?~~~~
取消只看楼主 加入收藏
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
收藏
已结贴  问题点数:100 回复次数:9 
有没有能自动获取结构体成员数量的方法?~~~~
在制作通用链表的过程遇到技术上的问题~具体点就是找一种自动分析结构体成员个数的方法以此来求其索引值,当然跳过这步可以~不过要另外多加个索引变量参数了~~这问题暂时没有解决思路~能否帮忙想想~~~~~~

问题是结构体成员数量以及其数据类型是不确定的~修改结构体成员数量得出结果体成员数量结果也不同~~~

例如
srturct a
{
   int a;
   int b;
};

结果体成员数量为2~~

struct b
{
    char a[20];
    int b;
    struct c
    {
       int a;
       int b;
    };
};

结构体b成员数量为3~~~~

尽量避免穷举法,以此来达到修改结构体成员数量所得到的值会相应发生变化的目的~感觉从原理上分析实现可能性不大~不知道有没有大神能给出高见??~~~~
搜索更多相关主题的帖子: 结构体 通用 技术 制作 
2017-05-18 01:23
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
顺便附加一下有没有自动获取各个结构体成员容量大小的方法~~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-18 01:29
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 3楼 吹水佬
这是一个方法~这个看来还是要做些人为判断功夫的~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-18 07:57
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 7楼 renkejun1942
其实本意是打算获取每一个结构体成员的容量~不跳过这一步也可以~就是要用户多调用一个容量参数~其实是打算通过结构体成员地址定位而做通用快排~目前做了一个~不过有内存泄露问题~还得改改看才行~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-18 11:54
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
感觉这个为不可解问题~除非能改变编译器的编译行为~不过如果是做汇编或者自己写编译器的可以解决~那就让它多调用一个关于偏移量或者数据容量的参数去吧~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-18 14:44
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 9楼 九转星河
有啦~要突破常规方法~~可以把代码本身写入一个临时文件~然后通过读取文件字符数据来判断结构体成员数量~~~~虽然这样实现难度较高~不过还是感觉有可能实现的~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-18 14:48
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 11楼 吹水佬
这个我还是想想算了~毕竟就算万一实现了意义也不是很大~现阶段还是别往这方向去弄了~毕竟还有很多东西要学~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-18 20:51
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
我惊呆了~~~~

图片附件: 游客没有浏览图片的权限,请 登录注册


原来这样都行~看来这个还是有希望实现的~~~~~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-18 22:00
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
不过这个还有一个棘手的技术难题~就是如果结构体声明不在当前文件~并且出现重名用#ifndef #define的情况~那就要判断其到底是属于哪个结构体~~这样就要模仿编译器行为才能解决~~所以还是先放一下吧~~

PS明白了~编译器把变量名转化为地址以及对宏的处理的是在预编译的时候进行的~

[此贴子已经被作者于2017-5-19 11:43编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-18 23:57
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 17楼 九转星河
突然明白了~编译器本来就没有结构体成员数量这个概念~变量名都在预编译的时候转化为地址了~而地址的值可以是连续的~也就是说每一个字节的数据都可以修改~只是改了不敢保证会出问题一样~所以试图通过地址来获取变量名原理上是行不通的~因为编译器在编译的时候接收到的指令~只是保留了执行代码块的地址而变量名在预编译的时候就进行替换了~~虽然试图通过搜索地址来获取变量名这种方法原理上行不通~但是却加深了我对编译器的理解~~

[此贴子已经被作者于2017-5-19 12:00编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-19 11:59
快速回复:有没有能自动获取结构体成员数量的方法?~~~~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022402 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved