免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: RobinsonNie
打印 上一主题 下一主题

C程序中,如何测试一个变量为何种数据类型。  关闭 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-07-05 12:57 |只看该作者

回复 #8 MMMIX 的帖子

Thanks!!!

论坛徽章:
0
12 [报告]
发表于 2008-07-05 23:48 |只看该作者

回复 #11 RobinsonNie 的帖子

c++可以 boost库里有

论坛徽章:
0
13 [报告]
发表于 2008-07-05 23:58 |只看该作者
gcc 的 typeof

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
14 [报告]
发表于 2008-07-06 02:14 |只看该作者
居然没人提到我的签名,真失败。
广告一下。

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
15 [报告]
发表于 2008-07-06 03:12 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
16 [报告]
发表于 2008-07-06 03:27 |只看该作者
原帖由 c/unix 于 2008-7-6 03:15 发表



Hi,I don't think your en is some,you know authentic...maybe disgusting

So do not show it anymore. You can make it ,right?


学习中
学到一个新惯用法 i don't think xxx is some就是不咋的意思吧
但是authentic在此处是什么意思呢?
可信的?
还请赐教

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
17 [报告]
发表于 2008-07-07 14:20 |只看该作者
原帖由 zhujiang73 于 2008-7-6 11:01 发表


      在袜子上装个无线电信标不就行了。  只是 C 不支持 RTTI  ,自己实现比较麻烦。


#include <stdio.h>

/*
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通常情况下程序员应该记得哪个变量是什么类型。但是在有些特殊情况下运行时类型信息获取是有必要的。
比如要用通用函数做数据的打包和解包,函数接受基类型的指针作参数却要完成对派生类型的打包和解包,这时
就需要运行时类型信息获取。虽然 C 不直接支持,但是我们可以手工在 “袜子” 上贴个标签,以便随时追踪它。 :-)
&nbsp;&nbsp;

*/


typedef struct
{  
&nbsp;&nbsp;&nbsp;&nbsp;char  class_name[2];
&nbsp;&nbsp;&nbsp;&nbsp;int   class_size;
} Base;

typedef struct
{  
&nbsp;&nbsp;&nbsp;&nbsp;Base  parent;
&nbsp;&nbsp;&nbsp;&nbsp;int   ma;
} A;

typedef struct
{
&nbsp;&nbsp;&nbsp;&nbsp;Base  parent;
&nbsp;&nbsp;&nbsp;&nbsp;int   mb;
&nbsp;&nbsp;&nbsp;&nbsp;char  text[20];
} B;

A_init(void *this)
{
&nbsp;&nbsp;&nbsp;&nbsp;Base  *pp;
&nbsp;&nbsp;&nbsp;&nbsp;pp = (Base*)this;
&nbsp;&nbsp;&nbsp;&nbsp;pp->class_name[0] = 'A';
&nbsp;&nbsp;&nbsp;&nbsp;pp->class_name[1] = '\0';
&nbsp;&nbsp;&nbsp;&nbsp;pp->class_size = sizeof(A);
}

B_init(void *this)
{
&nbsp;&nbsp;&nbsp;&nbsp;Base  *pp;
&nbsp;&nbsp;&nbsp;&nbsp;pp = (Base*)this;
&nbsp;&nbsp;&nbsp;&nbsp;pp->class_name[0] = 'B';
&nbsp;&nbsp;&nbsp;&nbsp;pp->class_name[1] = '\0';
&nbsp;&nbsp;&nbsp;&nbsp;pp->class_size = sizeof(B);
}

int main (int argc, char *argv[])
{
&nbsp;&nbsp;&nbsp;&nbsp;A      a, *pa;
&nbsp;&nbsp;&nbsp;&nbsp;B      b, *pb;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;Base   *pbase;   

&nbsp;&nbsp;&nbsp;&nbsp;pa = &a;
&nbsp;&nbsp;&nbsp;&nbsp;pb = &b;

&nbsp;&nbsp;&nbsp;&nbsp;A_init((void*)pa);
&nbsp;&nbsp;&nbsp;&nbsp;B_init((void*)pb);
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;pbase = (Base*)pa;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;printf("%s size = %d  ", pbase->class_name, pbase->class_size);

&nbsp;&nbsp;&nbsp;&nbsp;pbase = (Base*)pb;

&nbsp;&nbsp;&nbsp;&nbsp;printf("%s size = %d  \n", pbase->class_name, pbase->class_size);

&nbsp;&nbsp;&nbsp;&nbsp;printf("A size = %d  B size = %d \n",  sizeof(a), sizeof(b));

&nbsp;&nbsp;&nbsp;&nbsp;return  0;
}

论坛徽章:
0
18 [报告]
发表于 2008-07-07 14:24 |只看该作者
#include <typeinfo>

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
19 [报告]
发表于 2008-07-07 16:51 |只看该作者
原帖由 RobinsonNie 于 2008-7-5 11:56 发表
如题。
谢过。


为什么有这种需求,谢谢。

flw会问你昨晚他袜子放哪里了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
20 [报告]
发表于 2008-07-07 16:52 |只看该作者
原帖由 flw 于 2008-7-6 02:14 发表
居然没人提到我的签名,真失败。
广告一下。


我靠,我来晚了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP