免费注册 查看新帖 |

Chinaunix

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

有此一说:“C不过也是山寨版的Pascal,本质上就是把BEGIN,END变成了花括号” [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
201 [报告]
发表于 2011-10-19 00:22 |只看该作者
回复 200# 塑料袋

>> 依我的看法,所谓“抽象”,是你已经站在了“具体”的制高点,才能抽象。 不懂几种architecture,根本无法领悟kernel对mm的抽象;不懂几种文件系统,同样无法领悟VFS层的抽象。
>> 所以如果不是计算机行业的超牛,根本无法正确的讨论C语言所作的抽象。

会正确使用malloc的,但不懂kernel中的mm部分,大有人在吧?
不懂文件系统细节,但知道如何正确使用fopen的,大有人在吧?

不只是kernel中的mm、vfs才是抽象; malloc/fopen 同样是抽象, 不同层次的抽象。
而且, 大部分功能都不需要用到mm、vfs的层次, 而只需要用到malloc/ fopen的层次。

只是对于C语言来说, 许多层次的抽象没有被完全隔离
多种层次混合在一起可以同时被C语言访问, 这应该是C语言故意这么设计的。

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
202 [报告]
发表于 2011-10-19 00:27 |只看该作者
回复 201# OwnWaterloo


    好吧好吧,不说这个了。


   
   我跟老A说说好话,争取明天把老A叫过来给我助阵。

   我主打,再加上我的盟友bbjmmj。

   还有处在风口浪尖的ecloud。

  
   相信一定日死pmerofc~~~~~

论坛徽章:
1
水瓶座
日期:2014-03-20 18:21:14
203 [报告]
发表于 2011-10-19 00:34 |只看该作者
这5年主要是等有足够多的基本符合C++98的编译器的出现。
相比之下后面8年还可以忍……
不知道接下去还 ...
幻の上帝 发表于 2011-10-18 22:39



    如果,我是说如果微软大力推行C#和.net,那么C++的结果就是堕入小众
    非Win平台目前C++的使用并不多并且是萎缩趋势。IBM的软件已经在Java化并且完成了大部分,SAP紧随其后,Oracle就不用说了,HP收购的那些东西现在已经在用C#重写了。移动平台更不用说了,QT彻底没戏了;也就桌面游戏是C++最后一点堡垒了,但是好像听说用.net调用DX11的效率更高,似乎微软又开始玩黑手了

我相信微软在最近几年内一定会用C#重写它的大部分软件的

论坛徽章:
1
水瓶座
日期:2014-03-20 18:21:14
204 [报告]
发表于 2011-10-19 00:52 |只看该作者
回复  OwnWaterloo


    我不认可你的观点。 而且,我不善于讨论这些很难客观评价的东西。


    依 ...
塑料袋 发表于 2011-10-19 00:11



    按照我的理解,C语言起语法本身并没有抽象太多东西,相对于Pascal来说C的随意性较高,并无语言结构上进行的强制,使得C成为一种可以写的很汇编化的高级、结构化的语言,这正是C可以如此流行的重要原因。因为在80年代人们更倾向于这种"汇编化"的编程方式,而且大多数程序本身就是硬件高度相关的

90年代后期随着硬软件的发展,程序设计越来越抽象化,比如OO,比如消息驱动和数据驱动模式等
也是从此开始C逐渐淡出大型软件,退居到主要是硬件相关领域
至于Gcc,已经是C的后流行时代的产物了,比较可惜的是它出现的有点晚

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
205 [报告]
发表于 2011-10-19 00:55 |只看该作者
本帖最后由 OwnWaterloo 于 2011-10-19 00:57 编辑

回复 200# 塑料袋

>> 依我的看法,所谓“抽象”,是你已经站在了“具体”的制高点,才能抽象。

抽象本身是可以独立存在的。 比如第1个lisp实现出现之前,lisp的设计就没有具体实现可以参考。
所以应该说成: 离开具体、抽象难以被准确理解


从具体实现去理解抽象确实比单凭想象要容易。
比如以我自己的经历来说, 我觉得extern并不需要elf才能理解得到位。
但 "指针与数组名" 的区别, 我是看了汇编(具体实现)才认为自己终于理解透彻了……


然而从具体实现去理解抽象容易混淆具体与抽象之间的界限

常见的例子比如 printf("%d %d", i, ++i)
从某个平台A具体行为理解这行代码的含义很容易。

但不是每个人都有机会很快接触到与平台A行为不同的平台B。
如果再不借助抽象这种思维工具, 这个潜在的bug就没法消除……

所以很多人都要花很长时间才能(甚至一直都没能)理解ISO C这层抽象并不保证这行代码的行为。
没能分清具体实现与ISO C之间的界限与区别是许多C程序员都存在的问题……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
206 [报告]
发表于 2011-10-19 00:56 |只看该作者
回复 202# 塑料袋

我看出来了,你来CU的目的就是找乐子……

论坛徽章:
0
207 [报告]
发表于 2011-10-19 00:59 |只看该作者
你抓到过?我怎么没印象
pmerofc 发表于 2011-10-18 23:41


你翻翻前面的代码,看谁抓你了

好吧,再说你的最后三段代码

续 1849楼
这段代码的功能可以很简洁地完成
pmerofc 发表于 2011-09-13 11:12


for( i = 2 ; i < 10 + 1 ; i++ )
如此业余的代码风格。
因为你批判过谭的 for(i = 1; i <= n; i++) 比较业余,
写i < 10+1,是为了“不和自己的批判”互相矛盾吗?:wink:

我看还不如写
for( i = 2 ; i <= 10 ; i++ )
或者写
int max_i = 0;
...
for( i = 1 ; i < 10 ; i++ )
...
printf("是第%d个数\n", (max_i+1));


————谭浩强 ,《C程序设计》(第四版),清华大学出版社,2010年6月,p184

通过此例,只能看到如何使 ...
pmerofc 发表于 2011-09-05 14:08


号称专业、易读的代码,竟然写
int max(int ,int );
专业程序员很少有在声明中省略参数的习惯,
参数名也是很好的帮助提示,这将导致代码分析软件难以反馈出参数名提示。


我的写法
pmerofc 发表于 2011-08-15 23:44

在1714楼谭的代码,第一个*行,前面输出了3个空白。
你的代码,第一个*行,前面输出了4个空白。
所以你的正确的代码,应该是
  printf("%*s\n" , i + sizeof(ASTERISK) - 1, ASTERISK );
而不是
  printf("%*s\n" , i + sizeof(ASTERISK) , ASTERISK );


少一个-1, 证明你认为 sizeof(ASTERISK) 的值为 strlen(ASTERISK),
其实它的值是  strlen(ASTERISK)+1

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
208 [报告]
发表于 2011-10-19 01:09 |只看该作者
回复 207# AD8018

我一般不从风格方面批评代码。
我也没看原帖、不知道代码的意图。
所以我只抓到了一个,被你忽略的,辫子。
你能猜到在哪里么?

论坛徽章:
0
209 [报告]
发表于 2011-10-19 01:14 |只看该作者
本帖最后由 AD8018 于 2011-10-19 01:17 编辑
回复  AD8018

我一般不从风格方面批评代码。
我也没看原帖、不知道代码的意图。
所以我只抓到了一个, ...
OwnWaterloo 发表于 2011-10-19 01:09



    sizeof string ?
老实说,不清楚标准关于这个的论述,只是经验结论。
如果是,就请明示下

还有就是 int + size_t , printf中是否可以等同为int呢?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
210 [报告]
发表于 2011-10-19 01:19 |只看该作者
回复 209# AD8018

你赢了……


printf("%*s\n" , i + sizeof(ASTERISK) - 1, ASTERISK );
printf("%*s\n" , (int)(i + sizeof(ASTERISK) - 1) , ASTERISK );

不知道ASTERISK是什么, %s 是否正确。
也不知道源代码意图, 是否应该 -1 。

但 i+sizeof(ASTERISK) 不能保证是int类型 —— 那个"*"需要的类型。
也不能保证是unsigned —— int兼容类型。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP