免费注册 查看新帖 |

Chinaunix

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

争论C概念正确性的一般路子是什么? [复制链接]

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
241 [报告]
发表于 2012-06-04 16:25 |只看该作者
回复 235# zylthinking


    我觉得这个的确是C语言之外的事情。你也说了,OS神马的(其实pm的关于编译器选项的也没错,很多编译器都有栈大小选项的),既然是C语言之外的事情,一本初学者的书为嘛要涉及呢?

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
242 [报告]
发表于 2012-06-04 16:25 |只看该作者
starwing83 发表于 2012-06-04 16:20
回复 234# wwwsq


你既然说他的都有道理, 那么这段呢, 你也认为 float average(float array[10]) 不但是不必要的, 也是错误的吗

考察一下下面的样本代码:
#include <stdio.h>
int main( )
{ float average(float array[10]);
  float score[10],aver;
  int i;
  printf("input 10 scores:\n");
  for(i=0;i<10;i++)
    scanf("%f",&score);
  printf("\n");
  aver=average(score);
  printf("average score is%5.2f\n",aver);  
  return 0;
}

float average(float array[10])
{ int i;
float aver,sum=array[0];
for(i=1;i<10;i++)
    sum=sum+array;
aver=sum/10;
return(aver);  
}
复制代码
————谭浩强 ,《C程序设计》(第四版),清华大学出版社,2010年6月,p194
    首先看main()函数,其中的“aver=average(score);”一句是main()函数要求average()函数求出数组score各个元素的平均值并返回,然而实参只有一个score,而score在这里表示的仅仅是指向数组score首个元素的指针,并不代表整个数组。也就是说main()函数并没有提供给average()函数进行计算的必要条件。这等同于老板要员工完成项目但却不提供必要的条件。
    再看一下average()函数的定义。首先,形参类型声明“float array[10]”中,“[]”内的那个10不知所云,是完全多余的,毫无必要。可能有人认为写这个10并没有编译错误,因为编译器会忽视这个10。可问题是,既然这个10对编译及程序没有任何效用,为什么要写上这个10呢?如果要写一个函数求两int类型数据的和,是否会有人写成下面那样呢?
int sum ( int a, int b ,int c)
{
   return a + b ;
}
复制代码
这个函数同样没有编译错误,但人人都知道那个形参c是可以没有的。可以没有的就是并不需要的,并不需要的就是多余的,多余的就是错误的。函数定义中“[]”内的那个10和这段代码中的“c”就“多余”这点来说,没什么两样。因而,average()函数定义形参类型声明应该写为“float array[]”。这表示函数计算的依据是一个由实参传来的指针。

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
243 [报告]
发表于 2012-06-04 16:29 |只看该作者
zylthinking 发表于 2012-06-04 16:13
是我封给他的
你说的那些例子似乎没错, 那他的语气呢, 比如什么上错了床之类?
在比如, 既然说的这 ...
  1. int arr[10 * 1024 * 1024];
复制代码
这个属于挖坑呀,太坏了。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
244 [报告]
发表于 2012-06-04 16:33 |只看该作者
starwing83 发表于 2012-06-04 16:25
回复 235# zylthinking


你觉得是初学者的书吗?
这段话来自OW的那个堆栈的帖子, 本意是批判堆栈不分的, 和他那本鸟书有屁关系。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
245 [报告]
发表于 2012-06-04 16:34 |只看该作者
回复 242# zylthinking


    这个应该是pm的语气矫枉过正了。的确这个说法不太好,不过估计也只是为了告诉初学者这样不好吧。

我倒是觉得那个10在某些情况下是很重要的,比如一个digest算法,这个10指明了处理的分块粒度,这个客户端使用方是必须知道的。

这里其实跟老谭有同样的问题——我看老谭书的时候一个最大的疑问就是老谭嘴里所说的“错误”到底是什么,是编译错误?是不好习惯?还是不能容忍的漏洞?还是运行时错误?我当初真的很不明白。

这一段pm的确是可以改改,语气别这么绝对。

论坛徽章:
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
246 [报告]
发表于 2012-06-04 16:40 |只看该作者
昏昏昭昭来本版,就是为的两件事:

一是秀他的垃圾书,吸引眼球,获得经济利益。
二是休他的胡搅蛮缠,恬不知耻


它来这里盖高楼,本意是为的借CU的人气,来蒙骗懵懂的骚年们。

他这本破书,是高手看了成菜鸟,菜鸟看了直接放弃C语言。

将来这些人总糊涂下去还好,一旦反过味来骂昏昏昭昭,也少不了把我们捎带上,因为是借这里的人气炒作的。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
247 [报告]
发表于 2012-06-04 16:44 |只看该作者
starwing83 发表于 2012-06-04 16:34
回复 242# zylthinking



所谓内存泄露(Memery leak),指的是程序向操作系统申请了一块内存,但并不使用这块内存或使用完毕之后并不把这块内存归还给操作系统,同时放弃了对这块内存的跟踪与控制。这样,这块内存就成了断了线的风筝一样,操作系统认为这块内存在被使用,所以不可能再把这块内存拿出来给程序使用,但由于程序已经放弃对它的跟踪与控制,事实上它已经不可能再被使用了,成了一块白白耗费系统资源的“内存垃圾”。
    内存泄漏的直接后果是减少可用内存数量,从而降低计算机的性能。严重时可以导致全部或部分计算机设备停止正常工作,或者应用程序崩溃。
    因此,程序员们把内存泄露视为一种很严重的BUG,在写代码时往往会如履薄冰小心翼翼地避免出现内存泄露。
    由于这种BUG很难查找,甚至有很多专门查找内存泄露的工具软件被发明出来帮助程序员减少这类错误。

既然你说初学者的书应该不考虑堆栈
那么这段莫非又是C的范围
还别说标红那一段的正确与否的问题

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
248 [报告]
发表于 2012-06-04 16:47 |只看该作者
回复 247# zylthinking


    标红的第三句有点小问题,其他的问题不大。

剩下的晚上说,我赶火车,10点半到南京。7点就要上车了。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
249 [报告]
发表于 2012-06-04 16:53 |只看该作者
本帖最后由 zylthinking 于 2012-06-04 17:16 编辑
starwing83 发表于 2012-06-04 16:47
回复 247# zylthinking


如果我加上假设虚拟内存页交换起作用
那么失去跟踪的内存如果被换出永不还入, 第二小句你觉得有没有问题? 自然你可以争辩说失去跟踪的内存不超过一个页面, 并且同一页面的其他内存确实可被访问到的。

重复一下一开始的主问题:
如果堆栈是C语言之外的, 那么这一小段是什么?

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
250 [报告]
发表于 2012-06-04 17:00 |只看该作者
这个应该是pm的语气矫枉过正了。的确这个说法不太好,不过估计也只是为了告诉初学者这样不好吧
既然是C语言之外的事情,一本初学者的书为嘛要涉及呢

算了, 我觉得没必要和你举例子了
每个人的立场是他人改变不了的, 你的立场很显然是因为专家反谭是解气的, 所以要支持, 就算是被抓住了破绽, 也要小事化了
而我们是反专家的, 所以任何问题在我们这里就要放大,
都有情绪化的东西在里面。

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP