免费注册 查看新帖 |

Chinaunix

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

[C++] 关于C语言,我喜欢和讨厌的十件事 [复制链接]

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
21 [报告]
发表于 2013-11-15 15:23 |只看该作者
本帖最后由 yulihua49 于 2013-11-15 15:30 编辑
yulihua49 发表于 2013-11-15 14:56
一般不行。
你看看我的那个题目,如果你对JSON不熟悉,转XML也行,不然可以将struct序列化成任意格式。
...

这是JAVA,用反射的。
  1. s=new String(mid.data);//从服务器拿到数据,多个记录的JSON序列化值
  2.                           
  3.                                 val_array=new JSONArray(s);
  4.                           
  5.                                 if(val_array!=null) {
  6.                                   System.out.println("page_select:"+s+",rows="+val_array.length());
  7.                                   for(i=0;i<val_array.length();i++) {//多个记录
  8. //把json反序列化到 PAGE 对象
  9.                                         Jorm.jsonToObject(page,val_array.getJSONObject(i));//就是这个,我们的jsonToStruct()在哪里?
  10. //现在我们可以处理这个page了。
  11.                                         System.out.println("result["+i+"]="+page.page_name+","+page.page_id);
  12.                                   }
  13.                                 }
复制代码

论坛徽章:
0
22 [报告]
发表于 2013-11-15 15:27 |只看该作者
反射个j8毛,没有操作系统用到反射,老子做N多项目,从未用过反射,

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
23 [报告]
发表于 2013-11-15 15:37 |只看该作者
本帖最后由 yulihua49 于 2013-11-15 15:47 编辑
u010402865 发表于 2013-11-15 15:23
回复 19# yulihua49

反射个毛啊,反射就是tmd可有可无的鸡肋

骂街谁都会,你给解决一下这个实际问题。
再说C也没有反射,想用你也用不着。
无非是,如果你要想传送100种结构,就用200个函数(一个序列化,一个反序列化)。如果这样,你干了一辈子软件,做了无数工程,也就是个程序匠。

你写得出这个工具吗?  Jorm.jsonToObject(page,val_array.getJSONObject(i));//就是这个,我们的jsonToStruct()在哪里?
这个工作我们18年前就做了。不是C做不出来,而是太困难,没有反射,简单的需求成了庞大的工程。

论坛徽章:
0
24 [报告]
发表于 2013-11-15 15:45 |只看该作者
yulihua49 发表于 2013-11-15 15:37
骂街谁都会,你给解决一下这个实际问题。
再说C也没有反射,想用你也用不着。
无非是,如果你要想传送1 ...


别扯些没用的,你说说什么逻辑用到反射?

论坛徽章:
0
25 [报告]
发表于 2013-11-15 15:47 |只看该作者
回复 23# yulihua49

从A可以找到B,让从B找A,是不是这就是反射?

   

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
26 [报告]
发表于 2013-11-15 15:49 |只看该作者
本帖最后由 yulihua49 于 2013-11-15 16:17 编辑
u010402865 发表于 2013-11-15 15:45
别扯些没用的,你说说什么逻辑用到反射?

19楼的题目,后边那些贴有详细需求。
你写得出这个工具吗?  Jorm.jsonToObject(page,val_array.getJSONObject(i));//就是这个,我们的jsonToStruct()在哪里?
这个工作我们18年前就做了。不是C做不出来,而是太困难,没有反射,简单的需求成了庞大的工程。
这个我们已经做了,想跟坛子里的朋友们探讨一下,你们有什么更好的办法呢?
  1. int json_to_struct(void *data,JSON_OBJECT json,T_PkgType *typ)
  2. {
  3. T_PkgType *tp;
  4. int i,num;
  5. JSON_OBJECT val;
  6.         num=0;
  7.         if(!json) return 0;
  8.         if(typ->offset<0) set_offset(typ);
  9.         tp=typ;
  10.         for(i=0;tp->type>=0;i++,tp++) {
  11.                 if(tp->type == CH_STRUCT) {
  12.                         val=json_object_object_get(json,plain_name(tp->name));
  13.                         if(!val) continue;
  14.                         json_to_struct(data+tp->offset,val,(T_PkgType *)tp->format);
  15.                         continue;
  16.                 }
  17.                 if((val=json_object_object_get(json,plain_name(tp->name)))!=NULL) {
  18. //ShowLog(5,"%s:%s=%s,offset=%d",__FUNCTION__,tp->name,json_object_get_string(val),tp->offset);
  19.                         put_str_one(data,(char *)json_object_get_string(val),tp,0);
  20.                         num++;
  21.                 }
  22.         }
  23.         return num;
  24. }
复制代码
没有反射,添加了T_PkgType类型的模板,说明那个结构里有啥。就是需要反射的内容写在模板里,与结构同时提交。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
27 [报告]
发表于 2013-11-15 15:52 |只看该作者
本帖最后由 yulihua49 于 2013-11-15 16:04 编辑
u010402865 发表于 2013-11-15 15:47
回复 23# yulihua49

从A可以找到B,让从B找A,是不是这就是反射?

不是。反射是指在运行时解析struct的成员。
就是你要处理一个在你的程序编译时没有定义的结构。
比如,你要写一个:
struct_to_json(void *struct_val,JSON_OBJECT json);
这个struct_val是一个结构指针,但你不知道是什么结构,只好用Viod*,将来人家使用你这个函数时,把具体变量提交给你。
你要分析那个结构里有哪些成员,把他们一一装入json。难点就是如果知道人家的结构?反射最方便,没有反射的话,问题就非常复杂了。

这个延伸出来,就是如何把一个结构与数据库表映射起来。这样访问数据库就非常简单了。

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
28 [报告]
发表于 2013-11-15 16:04 |只看该作者
static作用于函数、全局变量,改变的是链接属性;作用于局部变量,改变的是变量的生存期。你们确定相同?

《C专家编程》有一节专门讨论此类问题,static的双重含义就在其中。在C++里,static的含义又多了俩。也许是觉得static太忙了,早先的时候C++推荐使用匿名namespace替代static的一种用法(作用于全局函数、变量)。不过实际上这么做没什么明显好处。

论坛徽章:
0
29 [报告]
发表于 2013-11-15 16:05 |只看该作者
yulihua49 发表于 2013-11-15 15:49
你写得出这个工具吗?  Jorm.jsonToObject(page,val_array.getJSONObject(i));//就是这个,我们的jsonToStruct()在哪里?
这个工作我们18年前就做了。不是C做不出来,而是太困难,没有反射,简单的需求成了庞大的工程。 ...


如果反射真的这么重要,为什么大牛们设计操作系统时没考虑用到反射?

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
30 [报告]
发表于 2013-11-15 16:07 |只看该作者
本帖最后由 liuiang 于 2013-11-15 16:08 编辑

好吧,我支持楼上的楼上两位的。坚定地站在楼主一边。O~~Y~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP