Chinaunix

标题: 再顺便强x一下某昏昏吧 [打印本页]

作者: wwwsq    时间: 2012-05-28 12:52
标题: 再顺便强x一下某昏昏吧
本帖最后由 wwwsq 于 2012-05-28 22:21 编辑

某昏昏对老谭很不满意,点评说:
“函数属性”:莫名其妙的说法

实际呢,看看gcc的帮助文档:
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html

某昏昏自己对function attributes毫无概念,反而说老谭莫名其妙。这大概就是无知者无畏吧。

强x好像是会上瘾的。要是每天都来强x一下,会不会有点太过分?


5/28 22:20 附加说明:gcc引入__attribute__关键字是为了更方便的描述更多的函数属性,但是在gcc引入__attribute__关键字之前,函数就一直都是有属性的。


作者: dengxiayehu    时间: 2012-05-28 13:12
楼下自备板凳,顺带顶楼x
作者: 千年老狼    时间: 2012-05-28 13:15
lollol
作者: bruceteen    时间: 2012-05-28 13:16
“老谭”是怎么讲解“函数属性”的?
“某昏昏”又是怎么批的?
因为我怀疑,gcc的“function attributes” 和 老谭口中的“函数属性” 是两个不同的概念
作者: wwwsq    时间: 2012-05-28 13:17
本帖最后由 wwwsq 于 2012-05-28 16:05 编辑

某昏昏对strlwr不满意,说“不知道老谭哪儿搞来的这东西”,实际上这个是<string.h>里面的,是事实标准。
然后某昏昏说“这个函数的参数也不可能是“字符串”,只能是存放在数组中的字符串”,那好我把这个函数的原型贴出来:
extern char *strlwr(char *s);

见识少不是你的错,不要出来乱说话就好。我也不挑剔,继续往下看:

老谭说“库函数并非C语言本身的组成部分”,某昏昏对此大为不满,说“看来C标准完全可以把库函数部分删除了”。
从严格意义来说,库函数确实不是C语言本身的组成部分。就如jdk和jvm不是一回事一样。现在的发展趋势是语言和库的界限越来越模糊,但是从概念上讲,语言就是语言,库就是库。看过<string.h>和<string>这两个头文件之后,对于语言和库的区别会有更清晰的理解。

我还是不挑,再继续往下看:
昏昏说"81这个常数也很怪异",外行了吧?80是很多界面的约定每行字符数,81是多了一个结束符。顺手用81字符一点都不怪异。
代码风格什么的完全是口味问题,比如很多人就是喜欢{在行首,没什么好说的。

不挑剔,继续往下看:
"C语言把赋值运算作为表达式
评:晕"
某昏昏对操作符、表达式这些基本概念只是知其然不知其所以然,所以晕也是正常的。不评论。

先这样。


5/28 15:55 修正一下:strlwr在linux的<string.h>里面并没有,我的措辞不够严谨(这里是加修正,不修改原文,以免别人说我耍赖)。这个函数在tc和vc里面都有。很多程序也自己实现了这个函数。和itoa之类的函数一样,可以算是事实标准。老谭写书是基于tc写的,拿strlwr出来说说,很正常。实际上这个函数使用很广泛,只是C委员会太羞涩了才没标准化。

作者: bruceteen    时间: 2012-05-28 13:19
虽然我不了解C语言之父谭浩强,但我觉得他不应该懂得gcc,也不可能在遥远的过去能预言到gcc未来会有function attributes这一说法。
于是我google了一下,谭浩强说的函数属性可能是指 extern/static 这两种,而非你说的 __attribute__ 描述。
作者: wwwsq    时间: 2012-05-28 13:23
bruceteen 发表于 2012-05-28 13:19
虽然我不了解C语言之父谭浩强,但我觉得他不应该懂得gcc,也不可能在遥远的过去能预言到gcc未来会有functio ...



如果用比较模糊一点的概念来说,函数是有很多属性的,stdcall啦,static啦。所以泛泛的说函数属性,肯定是没错的。函数本身也算是一个“对象”,这个对象是有很多属性的。

作者: zhaohongjian000    时间: 2012-05-28 13:23
bruceteen 发表于 2012-05-28 13:16
“老谭”是怎么讲解“函数属性”的?
“某昏昏”又是怎么批的?
因为我怀疑,gcc的“function attributes ...


Gcc的文档说的它自己的__attribute__扩展,谭X讲的显然不可能是这个,我估计谭X的意思应该是指函数的链接属性(static/extern)。
作者: wwwsq    时间: 2012-05-28 13:26
本帖最后由 wwwsq 于 2012-05-28 13:26 编辑
zhaohongjian000 发表于 2012-05-28 13:23
Gcc的文档说的它自己的__attribute__扩展,谭X讲的显然不可能是这个,我估计谭X的意思应该是指函数的链 ...



不管老谭说的“函数属性”是泛泛而言的,还是具体指gcc的attribute,“函数有属性”这个事实是确实存在而且一直存在的。

很多人拘泥于面向对象、面向过程,而没有意识到function本身也可以说是“对象”,也有属性。某昏昏明显就属于被拘泥的情况。


作者: 三月廿七    时间: 2012-05-28 13:26
本帖最后由 三月廿七 于 2012-05-28 13:28 编辑

支持楼主,  

不过,我有点担心楼主 强 X 不成反被 C
作者: AD8018    时间: 2012-05-28 13:28
支持楼主,  
作者: wwwsq    时间: 2012-05-28 13:32
三月廿七 发表于 2012-05-28 13:26
支持楼主,  

不过,我有点担心楼主 强 X 不成反被 C


说的我菊花一紧

不过目前来看,基本上某昏昏是没这水平的。

我自己水平也很有限,被某些高手出来强x也是正常的。


作者: zhaohongjian000    时间: 2012-05-28 13:37
wwwsq 发表于 2012-05-28 13:17
某昏昏对strlwr不满意,说“不知道老谭哪儿搞来的这东西”,实际上这个是里面的,是事实标准。
然后某昏昏 ...


我不清楚你说的事实标准指什么,但我这里没找到这个函数(mint linux 12),man手册也查不到。
作者: zhaohongjian000    时间: 2012-05-28 13:41
wwwsq 发表于 2012-05-28 13:26
不管老谭说的“函数属性”是泛泛而言的,还是具体指gcc的attribute,“函数有属性”这个事实是确实存 ...


那你贴gcc的手册干什么?你说的也有道理,确实可以把函数的链接类型认为是函数的属性(之一),但这说法太随意了,谁知道说的是函数的哪门子“属性”。
作者: wwwsq    时间: 2012-05-28 13:47
本帖最后由 wwwsq 于 2012-05-28 13:52 编辑
zhaohongjian000 发表于 2012-05-28 13:37
我不清楚你说的事实标准指什么,但我这里没找到这个函数(mint linux 12),man手册也查不到。



“事实标准”是个模糊的概念。这个函数在vc的里面有,因为实在很好用,很多linux下的项目实际上是自己实现了这个函数。你谷歌一下linux strlwr就知道了。我说的那个<string.h>应该是vc下的,这里我可能有点模糊了。

C委员会的人是比较羞涩的,类似的case还有itoa,明明很有用,他们就是打死都不放到标准库里面去。于是这些函数都成为编外的事实标准了。

类似的还有MIN、MAX的宏。

作者: wwwsq    时间: 2012-05-28 13:50
zhaohongjian000 发表于 2012-05-28 13:41
那你贴gcc的手册干什么?你说的也有道理,确实可以把函数的链接类型认为是函数的属性(之一),但这说法 ...



贴gcc的手册,是说明“函数是有属性的”,并不是光秃秃的。

gcc为了处理“函数属性”,都专门引入了一个关键字“__attribute__”。而且文档也说明了,这个关键字只是“allows you to specify special attributes when making a declaration”,并不能处理所有的attributes。实际上函数的有些attributes是从更底层的直接处理的,比如stdcall属性。

作者: zhaohongjian000    时间: 2012-05-28 13:57
wwwsq 发表于 2012-05-28 13:50
贴gcc的手册,是说明“函数是有属性的”,并不是光秃秃的。

gcc为了处理“函数属性”,都专门引入 ...


你这完全扯远了,gcc这里是实现了语言的扩展,本身就不在语言标准中。况且,前面都已经说明了,gcc的属性和谭X的属性根本不是一回事,难道仅仅因为都叫“属性”就有关了?
作者: wwwsq    时间: 2012-05-28 14:02
zhaohongjian000 发表于 2012-05-28 13:57
你这完全扯远了,gcc这里是实现了语言的扩展,本身就不在语言标准中。况且,前面都已经说明了,gcc的属 ...



声明函数的时候,可以指定函数属性,这个是说法没什么问题。不管有没有用gcc的__attribute__关键字。


作者: zhaohongjian000    时间: 2012-05-28 14:03
wwwsq 发表于 2012-05-28 13:47
“事实标准”是个模糊的概念。这个函数在vc的里面有,因为实在很好用,很多linux下的项目实际上是自己 ...


说了半天,你觉得这种函数用在入门书的例子里靠谱不?
作者: gtestm    时间: 2012-05-28 14:03
本帖最后由 gtestm 于 2012-05-28 14:04 编辑
bruceteen 发表于 2012-05-28 13:19
虽然我不了解C语言之父谭浩强,但我觉得他不应该懂得gcc,也不可能在遥远的过去能预言到gcc未来会有function attributes这一说法。
于是我google了一下,谭浩强说的函数属性可能是指 extern/static 这两种,而非你说的 __attribute__ 描述。


同意。

我也 Google 了一下,个人觉得“C 语言之父谭浩强”说的函数属性和关键字 __attribute__ 不是一回事。
作者: mirnshi    时间: 2012-05-28 14:03
搬板凳看热闹。
作者: wwwsq    时间: 2012-05-28 14:06
zhaohongjian000 发表于 2012-05-28 14:03
说了半天,你觉得这种函数用在入门书的例子里靠谱不?



考虑到老谭是基于turbo c来写的书,我觉得strlwr非常的靠谱:
http://www.mscto.com/vcpp/2009012318070_14.html

你们揪住strlwr来说,是想说明什么问题呢?想说这个函数不靠谱,还是想说老谭不靠谱?

作者: zhaohongjian000    时间: 2012-05-28 14:08
wwwsq 发表于 2012-05-28 14:02
声明函数的时候,可以指定函数属性,这个是说法没什么问题。不管有没有用gcc的__attribute__关键字。 ...


究竟什么是 “函数属性”?谭的书里看上去像是在说链接类型,这点你不反对吧。

那他和gcc的函数属性 相同点在哪?  都叫 “属性” 吗?
作者: zhaohongjian000    时间: 2012-05-28 14:11
wwwsq 发表于 2012-05-28 14:06
考虑到老谭是基于turbo c来写的书,我觉得strlwr非常的靠谱:
http://www.mscto.com/vcpp/200901231 ...


我就不说拿Turbo C作为07年出的书的环境这事本身就不靠谱了。

我认为:一本C的入门书,应该避免使用非标准库中的函数;如果使用,应该注明。
作者: wwwsq    时间: 2012-05-28 14:12
本帖最后由 wwwsq 于 2012-05-28 14:17 编辑
gtestm 发表于 2012-05-28 14:03
同意。

我也 Google 了一下,个人觉得“C 语言之父谭浩强”说的函数属性和关键字 __attribute__ 不是 ...



函数声明的时候可以指定一些“函数属性”,gcc提供的__attribute__关键字只是提供了更多的辅助。

http://docs.freebsd.org/info/gcc ... ion_Attributes.html

这篇文章对gcc的实现进行了说明。const也是function attribute

你们抠字眼的心情是可以理解的,但也要抠对,是吧?

作者: wwwsq    时间: 2012-05-28 14:14
zhaohongjian000 发表于 2012-05-28 14:08
究竟什么是 “函数属性”?谭的书里看上去像是在说链接类型,这点你不反对吧。

那他和gcc的函数属性 ...



http://docs.freebsd.org/info/gcc ... ion_Attributes.html
请去看看什么叫function attributes

抠字眼有什么意思呢?
“函数属性”并不是一个专有名词,意思正确不就可以了吗?

而且你们要抠字眼,也抠正确一点吧?

作者: wwwsq    时间: 2012-05-28 14:16
zhaohongjian000 发表于 2012-05-28 14:11
我就不说拿Turbo C作为07年出的书的环境这事本身就不靠谱了。

我认为:一本C的入门书,应该避免使用 ...



唉,别人怎么写书也要你来教了啊。

我觉得strlwr就是很靠谱的一个函数,在实际中使用也很广泛。用来当例子蛮好的,还可以微微的调戏一下C委员会,太可爱了。



作者: zhaohongjian000    时间: 2012-05-28 14:18
wwwsq 发表于 2012-05-28 14:14
http://docs.freebsd.org/info/gcc ... ion_Attributes.html
请去看看什么叫function att ...


谁在抠字眼?名字相同就联系到一起,大概不是抠字眼?
作者: zhaohongjian000    时间: 2012-05-28 14:20
wwwsq 发表于 2012-05-28 14:16
唉,别人怎么写书也要你来教了啊。

我觉得strlwr就是很靠谱的一个函数,在实际中使用也很广泛。用 ...


我怎么想也需要你来教?你还是看看正经的经典教材怎么写的吧。
作者: gtestm    时间: 2012-05-28 14:20
wwwsq 发表于 2012-05-28 14:12
函数声明的时候可以指定一些“函数属性”,gcc提供的__attribute__关键字来进行辅助。

http://doc ...


淡定,我看谭浩强的书是第二版,书中还没提到函数属性,当时第三版还没发行,到第三版谭浩强才有提出函数属性。

我只是对函数属性,发表一下看法,至于你和那个昏昏的恩怨是你们的事。
作者: wwwsq    时间: 2012-05-28 14:23
zhaohongjian000 发表于 2012-05-28 14:18
谁在抠字眼?名字相同就联系到一起,大概不是抠字眼?



http://docs.freebsd.org/info/gcc ... ion_Attributes.html

你还是先去看看这篇文章吧。。。。


作者: zhaohongjian000    时间: 2012-05-28 14:25
wwwsq 发表于 2012-05-28 14:23
http://docs.freebsd.org/info/gcc ... ion_Attributes.html

你还是先去看看这篇文章吧 ...


我猜再怎么跟你强调你都不会明白语言的实现和标准的区别,你要是真看了,有没有发现第一句是“In GNU C”?
作者: pmerofc    时间: 2012-05-28 14:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: zhaohongjian000    时间: 2012-05-28 14:29
pmerofc 发表于 2012-05-28 14:26
论坛无赖的常所用招数之一:
一旦被逼到绝境
就让别人去看东西


好像把我也打击到了

你们继续吧,我该干正事了。
作者: wwwsq    时间: 2012-05-28 14:30
zhaohongjian000 发表于 2012-05-28 14:25
我猜再怎么跟你强调你都不会明白语言的实现和标准的区别,你要是真看了,有没有发现第一句是“In GNU C ...



`const'
     Many functions do not examine any values except their arguments,
     and have no effects except the return value.  Such a function can
     be subject to common subexpression elimination and loop
     optimization just as an arithmetic operator would be.  These
     functions should be declared with the attribute `const'.  For
     example,

          int square (int) __attribute__ ((const));

     says that the hypothetical function `square' is safe to call fewer
     times than the program says.

     The attribute `const' is not implemented in GNU C versions earlier
     than 2.5.  An alternative way to declare that a function has no
     side effects, which works in the current version and in some older
     versions, is as follows:

          typedef int intfn ();
         
          extern const intfn square;

     This approach does not work in GNU C++ from 2.6.0 on, since the
     language specifies that the `const' must be attached to the return
     value.


我贴这段讲const的出来给你看。



`stdcall'
     On the Intel 386, the `stdcall' attribute causes the compiler to
     assume that the called function will pop off the stack space used
     to pass arguments, unless it takes a variable number of arguments.


再贴一段stdcall的说明来给你看。


要我翻译成汉语吗?

作者: pmerofc    时间: 2012-05-28 14:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: wwwsq    时间: 2012-05-28 14:36
很多人如果不了解函数也是有属性的,那也是正常的。因为这和日常工作关系也不大,就像吃饭的人没必要知道稻谷是那个品系的。

但是如果以无知当有趣,还要站出来卖弄,那就要做好被人强x的准备。

作者: wwwsq    时间: 2012-05-28 14:39
pmerofc 发表于 2012-05-28 14:36
我也没空和论坛无赖周旋
先让他飞一会


你这是煮熟的鸭子嘴硬呀

胡乱发表一些谬论,被反驳了就缩回去了。

作者: pmerofc    时间: 2012-05-28 14:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: wwwsq    时间: 2012-05-28 14:43
pmerofc 发表于 2012-05-28 14:39
论坛无赖绝技之二:
偷换概念
函数是“对象”,因此可以搞


以面向对象的思想,这个世界什么不是对象?

函数本身也是gcc编译的“对象”,也是有属性的。

gcc编译过程对你而言,大概太艰深了吧?在学校学过编译原理吗?

作者: pmerofc    时间: 2012-05-28 14:47
提示: 作者被禁止或删除 内容自动屏蔽
作者: wwwsq    时间: 2012-05-28 14:50
pmerofc 发表于 2012-05-28 14:47
http://bbs.chinaunix.net/forum.p ... ;page=6#pid12037267
58楼
科普帖:



你说:“函数属性”:莫名其妙的说法

只是体现了你对“函数”的无知而已。


作者: sacry    时间: 2012-05-28 14:53
本帖最后由 sacry 于 2012-05-28 14:54 编辑

支持楼主,但是

希望楼主能区分
>针对PM。
>针对”PM针对老谭“。

"但是如果以无知当有趣,还要站出来卖弄,那就要做好被人强x的准备。"用来形容老谭中么?

PS1:
对吾等观众来说,不管你针对PM还是PM针对老谭,管个P的动机想法,抓硬伤打脸什么的最好看了。
错的东西就是错的东西。

PS2:
感谢楼主让我知道有Function Attribute这么个东西。
但是眼拙没明白你贴出那段英文回
我猜再怎么跟你强调你都不会明白语言的实现和标准的区别,你要是真看了,有没有发现第一句是“In GNU C”?
是什么意思,能说明下么。
而且,这Function Attribute和老谭的函数属性,有关系?


作者: wwwsq    时间: 2012-05-28 14:58
sacry 发表于 2012-05-28 14:53
支持楼主,但是

希望楼主能区分



stdcall是函数的一个属性,gcc提供了通过__attribute__关键字来描述这个属性的‘语法’。

但是不管gcc是否提供__attribute__这个关键字,stdcall这个属性是客观存在的。

因此,‘函数属性’这个概念,是先于‘__attribute__关键字’而存在的。其他编译器,比如vc,没有__attribute__关键字,但仍然支持stdcall这个属性。

作者: sacry    时间: 2012-05-28 14:59
你说:“函数属性”:莫名其妙的说法

只是体现了你对“函数”的无知而已。


如果在“从C标准的角度,评论老谭这个术语用法”这个语境下,用“莫名其妙的说法”有什么问题么?

作者: wwwsq    时间: 2012-05-28 15:00
sacry 发表于 2012-05-28 14:59
如果在“从C标准的角度,评论老谭这个术语用法”这个语境下,用“莫名其妙的说法”有什么问题么?


static这个属性更有说服力吧?

作者: walleeee    时间: 2012-05-28 15:01
回复 13# zhaohongjian000


    这个函数据我所知并非标准函数,即便存在也该是属于某扩展
作者: zylthinking    时间: 2012-05-28 15:03
sacry 发表于 2012-05-28 14:59
如果在“从C标准的角度,评论老谭这个术语用法”这个语境下,用“莫名其妙的说法”有什么问题么?

你这话显得没见识了:
解读专家从来就不看语境的, 从上下文语境理解问题, 绝对是解毒专家认为缺乏科学精神(原句记不清楚了)的
你要是不信, 你去自己搜搜
作者: 塑料袋    时间: 2012-05-28 15:07
sacry 发表于 2012-05-28 14:59
如果在“从C标准的角度,评论老谭这个术语用法”这个语境下,用“莫名其妙的说法”有什么问题么?


无聊不无聊啊,这么引用套引用,双引号套双引号的抠字眼。


即使引入attribute这个关键字之前,函数也是有属性的,这是个客观存在。只不过当时如何控制这些属性有些麻烦。

像调用者or被调用者谁来保存现场,函数是.c还是.so还是整个进程内可见,同名的若干函数优先链接到那个.....这些问题是自古至今都有的,和是否引入了attribute关键字无关。
作者: walleeee    时间: 2012-05-28 15:08
回复 15# wwwsq


真有意思。既然是vc的,怎么你不先核实一下,验证好了在完完本本的说玩?

我估计是有sprintf这些函数,基本可以替代itoa的功能。甚至可以提供更多的功能。

作者: sacry    时间: 2012-05-28 15:09
回复 48# zylthinking

知道什么叫"对事不对人”?!

我看PM的帖子,是有正确的,有主观性强点的,还有搞错的。
但是我那一楼的话说得有什么问题?

只是觉得楼主打脸不够精彩,遗憾加解释下而已。






   
作者: wwwsq    时间: 2012-05-28 15:11
walleeee 发表于 2012-05-28 15:08
回复 15# wwwsq



嗯,说的时候是有点不够严谨。在linux的<string.h>里面是没strlwr函数,我随后修正了。

strlwr应该算是事实标准吧,在tc、vc里面都有的,很多程序也会自己实现这个函数。就是C委员会那帮家伙羞涩,一直不肯把这个函数标准化。


作者: walleeee    时间: 2012-05-28 15:11
回复 27# wwwsq


    我不知道你能不能分清书和一般使用以及论文和网络文章,四者之前的区别。
作者: zylthinking    时间: 2012-05-28 15:12
sacry 发表于 2012-05-28 15:09
回复 48# zylthinking

知道什么叫"对事不对人”?!


欢迎来到真实世界
作者: wwwsq    时间: 2012-05-28 15:19
walleeee 发表于 2012-05-28 15:11
回复 27# wwwsq



想说明什么呢?

作者: walleeee    时间: 2012-05-28 15:19
回复 44# wwwsq


    你把编译原理里面的属性文法和这里的属性搞混了。你自己没理解清楚。
作者: walleeee    时间: 2012-05-28 15:21
回复 48# zylthinking


你终于又出来了。归隐后生活如何?还安好?
作者: wwwsq    时间: 2012-05-28 15:21
本帖最后由 wwwsq 于 2012-05-28 15:21 编辑
walleeee 发表于 2012-05-28 15:16
回复 40# wwwsq



这句话招来天打雷劈,是因为“面向对象”这个思想太空洞了。

这里只是借用一下,说明函数也是有属性的,不是光秃秃的。

作者: walleeee    时间: 2012-05-28 15:22
回复 49# 塑料袋


赞一个,这些才是根本性质的东西
作者: wwwsq    时间: 2012-05-28 15:22
walleeee 发表于 2012-05-28 15:19
回复 44# wwwsq



如果面对初学者来说,函数属性,应该是一个可以理解的概念。比如static、const什么的。

作者: walleeee    时间: 2012-05-28 15:25
回复 52# wwwsq


反正我是很少在实际代码(开源代码)中看到有用这个函数。更是很少听到有人说,我自己更是从来没用过这个函数。

至于你是不是说事实上的标准,那我就不好说了。可能是,可能不是。
作者: 塑料袋    时间: 2012-05-28 15:27
pmerofc又不敢出来了,我艹。

说不定换个马甲喷两下,过两天又偷偷把他那个“昏昏昭昭”的帖子顶上来恶心人。


此2B最恶心的地方就是为了他个人的商业利益,为了卖书,指鹿为马,信口雌黄的污蔑他人;而且不遗余力的传播他那个从根本上就错误的观点,死扣语言,扣死语言,不惜将一些入门初学者引入歧途。

其实C单纯作为一种语言的话,本身乏善可陈,只是比较平均而已,论灵活不及汇编,论抽象不及更高级的语言。真正NB的是这么多年来人们对它的应用,而非这个语言本身。
作者: wwwsq    时间: 2012-05-28 15:28
walleeee 发表于 2012-05-28 15:25
回复 52# wwwsq



好吧。。。“事实标准”这个说法是有点争议。就像之前坛子里还争论过何谓“著名导演”。。。。

strlwr这个函数起码算是一个比较流行的函数吧。。。。放到教科书里面说一说我觉得也蛮正常的。。。。

作者: zylthinking    时间: 2012-05-28 15:29
walleeee 发表于 2012-05-28 15:21
回复 48# zylthinking


太热闹了, 对我来说似乎是个反专家的好机会。。。。。等高潮过去后, 我就偃旗息鼓了, 专家勿惊
作者: walleeee    时间: 2012-05-28 15:31
回复 60# wwwsq


函数没有属性,只有语言和编译器层面,这两方面的约定。

1.编译原理里面的属性文法
2.谭浩强的属性
3.你说的函数的属性
4.gcc的函数属性

这4个都不是一码事。你却把它们4个都在混为一谈。明白么?
作者: wwwsq    时间: 2012-05-28 15:32
walleeee 发表于 2012-05-28 15:29
回复 57# wwwsq



老谭的书确实有不足,金无足赤。在当前国内环境下,已经算是很好的入门教材了。

有些人半桶水出来晃荡,自己看不懂老谭的书还在那里昏昏昭昭的,这是误人子弟呀。

我们不要上纲上线,回到主题:函数有没有属性?

作者: walleeee    时间: 2012-05-28 15:32
回复 62# wwwsq


这些不是属性,即便你非要说属性,那也不地道。我一般很少听到在C/C++这些语言里面说属性的,属性一说法在java/c#这些里面见得多。
作者: walleeee    时间: 2012-05-28 15:33
回复 64# 塑料袋


前部分偏激,后部分有道理
作者: sacry    时间: 2012-05-28 15:34
回复 49# 塑料袋

1,我还就是很无聊。
2,我抠谁的字眼了?

我技术弱的很,但是我觉得慎重对待术语很重要。
你说的那段解释说的很好,受教了。

不过我以后和人说最多说“the attribute of function”,
“Function Attribute”是不会随意说的。(除非说的GCC的Function Attribute)
作者: mirnshi    时间: 2012-05-28 15:34
塑料袋 发表于 2012-05-28 15:27
pmerofc又不敢出来了,我艹。

说不定换个马甲喷两下,过两天又偷偷把他那个“昏昏昭昭”的帖子顶上来恶心 ...


C就是一个高级汇编。被这些人搞得那么复杂,总是唯语言论。
作者: walleeee    时间: 2012-05-28 15:34
回复 65# wwwsq


看我前面回复。
作者: walleeee    时间: 2012-05-28 15:35
回复 66# zylthinking


不至于吧 又没什么深仇大恨,何必呢
作者: chinesedragon    时间: 2012-05-28 15:35
呵呵~~~~~~~~~~~
作者: walleeee    时间: 2012-05-28 15:36
回复 69# wwwsq


对,我之前不是也有推荐他的书作为入门教材?这一点pm也和我意见不一。

只是我觉得即便不用他书作为入门,其他也有好几个选择,所以不用他书入门也可以。

作者: wwwsq    时间: 2012-05-28 15:36
walleeee 发表于 2012-05-28 15:31
回复 60# wwwsq



“属性”是一个专有名词吗?何谓属性?

中文名称:
    属性
英文名称:
    attribute
定义:
    描述地理要素的特点、性质或特征。在关系数据模型中描述某个实体的一种事实,相当于关系表中的一个栏。


属性即事物本身所固有的性质。是物质必然的、基本的、不可分离的特性,又是事物某个方面质的表现。一定质的事物常表现出多种属性。有本质属性和非本质属性的区别。


我不知道哪里还有更具体的定义。


In computing, an attribute is a specification that defines a property of an object, element, or file. It may also refer to or set the specific value for a given instance of such.


如果我们声明函数的时候,就说明了这个函数的一些“特点、性质或者特征”,比如static,那么这个不叫属性,又能叫什么呢?




作者: sacry    时间: 2012-05-28 15:36
本帖最后由 sacry 于 2012-05-28 15:37 编辑
函数没有属性,只有语言和编译器层面,这两方面的约定。

1.编译原理里面的属性文法
2.谭浩强的属性
3.你说的函数的属性
4.gcc的函数属性

这4个都不是一码事。你却把它们4个都在混为一谈。明白么?


支持下。
作者: walleeee    时间: 2012-05-28 15:38
回复 73# mirnshi


问题是本身用起来也的确容易出错,特别是半懂状态下。

只是这个还要看个人以及使用的复杂情况。
作者: wwwsq    时间: 2012-05-28 15:38
sacry 发表于 2012-05-28 15:34
回复 49# 塑料袋

1,我还就是很无聊。



是的,这个是和场景相关的。就像thread,在不同场景就有不同含义。纺织工人通常不会以为thread是线程。

函数属性这个说法,我觉得是很好理解的。函数确实有一些属性,比如static、const什么的。

作者: walleeee    时间: 2012-05-28 15:42
回复 78# wwwsq


你前面说了好几个属性,你在混淆概念,一会编译原理,一会gcc,一会c函数,一会谭浩强的书。

你用一个去混淆另外一个。现在又来跟我属性这个中文本身的含义。我不知道你要说什么。
作者: mirnshi    时间: 2012-05-28 15:44
walleeee 发表于 2012-05-28 15:38
回复 73# mirnshi

计算机语言必须经过实践,写的程序多了,自然掌握了。不写或很少写程序,就很难理解清楚了。而且有许多问题根本不是问题,比如讨论i++和++i的效率问题。如果编译出来的程序真的是由此产生瓶颈,那么这个硬件运行环境该送到博物馆收藏了。
作者: walleeee    时间: 2012-05-28 15:45
回复 81# wwwsq


你现在已经偏离了开始你开始的观点,现在仅仅在争辩属性这个词语本身的意义,语言是用来表达,而你现在却是争辩语言本身,也就是在争辩并非你想要表达的东西。

所以你不用继续争辩这个,你应该清晰的表达你的观点,只要有共识就行。你可以继续用你的属性说法,大家知道意思就行,这无伤大雅。
作者: wwwsq    时间: 2012-05-28 15:45
walleeee 发表于 2012-05-28 15:42
回复 78# wwwsq



那你给出一个“函数属性”的定义?

我认为函数属性并不是一个专有名词,而是指“函数的属性”。

因此,我们需要厘清一下,什么是函数,什么是属性。然后我们来看看,函数有没有属性。

作者: wwwsq    时间: 2012-05-28 15:47
walleeee 发表于 2012-05-28 15:45
回复 81# wwwsq




那你来说说什么叫“函数属性”?

gcc以__attribute__关键字,把“函数的属性”这个不怎么显眼的概念,变得更显眼而已。

作者: walleeee    时间: 2012-05-28 15:55
回复 83# mirnshi


有道理。你觉得谭浩强写过多少程序?前面不是有统计么,他出了70来本书,算下来从出生开始基本就每年1本。你觉得对于每个书,他有多少实践在里面?当然,不排除天才,比如李熬这样的,可以2个礼拜写1本书,可惜那是小说。我觉得技术书籍,你1年写一本这是不可思议。高德纳写那些书用了多少时间,想必你也清楚。还有就是谭浩强的书第四版了,还那么多低级出错,这是怎么回事?故意不改还是根本并非他所写而没能力去改?

你这里也强调了实践的重要,我也觉得对。所以谭书也没太多价值了。

而且有许多问题根本不是问题,比如讨论i++和++i的效率问题
这个之前(2000年以前)还是有一定价值,比如我印象中《深入理解计算机系统》就有对这个的详细理解,而且细化到指令层面,i++是2调指令,++i一般是1条。问题是现在编译器优化而言,这些都不是什么问题。所以你说“根本不是问题”,这个我觉得也是有道理,可以接受。

如果编译出来的程序真的是由此产生瓶颈,那么这个硬件运行环境该送到博物馆收藏了。

这个多方面因素。并非一定是硬件差。不然为什么现在有些模块还要手写汇编?
比如C据我所知就没有循环移位算符,而这个有都碰到好多次需要这个功能,结果只有手工模拟实现。当然,这个编译器一般会优化成循环移位指令,但是不觉得别扭么?
总之,我想说,考虑问题并非单因素。
作者: walleeee    时间: 2012-05-28 15:56
回复 85# wwwsq


我不知道,我根本就没有函数属性这个概念,你如果非要我说个说法,那你去看垃圾袋前面的帖子,我的意思就是那样。

你看完觉得和你所谓的函数属性相符合,那就无所谓了。
作者: sacry    时间: 2012-05-28 15:57
本帖最后由 sacry 于 2012-05-28 16:02 编辑
那你给出一个“函数属性”的定义?
gcc以__attribute__关键字,把“函数的属性”这个不怎么显眼的概念,变得更显眼而已。


术语区别一般词,就是它一般表示"the exact meaning", 并且有相对较权威的定义。

所以“函数的属性”只能是“the attribute of function”,
而google搜索“function attribute”,看到的只会是GCC的那东西。

我一直很羡慕各位高手,就是能指点江山,挥斥术语,从哲学高度讨论问题啊~~

PS:
1.我很难想象PM,或者学C的,会不知道函数的属性这样的东西,
但是不知道用函数的属性来形容就很正常。

2.我也不觉得老谭原话说对了。

所以我觉得楼主这打脸,不够精彩啊~~
作者: walleeee    时间: 2012-05-28 15:57
回复 86# wwwsq


    请参考上面的回复。

ps,
你这2个帖子不是一个意思?为什么要重复表达?
作者: walleeee    时间: 2012-05-28 15:58
这是在挑战pm啊,pm自己怎么不来?

zk,垃圾袋,ow这些人怎么自己不来,我来干什么?
作者: wwwsq    时间: 2012-05-28 16:14
sacry 发表于 2012-05-28 15:57
术语区别一般词,就是它一般表示"the exact meaning", 并且有相对较权威的定义。

所以“函数的属性” ...



_CRT_NONSTDC_DEPRECATE(_itoa) _CRT_INSECURE_DEPRECATE(_itoa_s)                _CRTIMP char * __cdecl itoa(_In_ int _Val, _Pre_notnull_ _Post_z_ char * _DstBuf, _In_ int _Radix);


这么长一串,你觉得_CRTIMP、__cdecl这些描述符,被称为是什么比较好呢?

static __inline__ int elf_coredump_extra_notes_size(void) { return 0; }

static、__inline__这些描述符,又被称为是什么比较好呢?


作者: pmerofc    时间: 2012-05-28 16:14
提示: 作者被禁止或删除 内容自动屏蔽
作者: OwnWaterloo    时间: 2012-05-28 16:20
3小时刷了10楼?! 强贴留个名
作者: wwwsq    时间: 2012-05-28 16:34
本帖最后由 wwwsq 于 2012-05-28 16:35 编辑
bruceteen 发表于 2012-05-28 13:19
虽然我不了解C语言之父谭浩强,但我觉得他不应该懂得gcc,也不可能在遥远的过去能预言到gcc未来会有functio ...



我不知道gcc的__attribute__是什么时候出来的,但如果是老谭无意中预言到了这个关键字的出现,我也一点都不意外。

因为函数属性这个东西一直都是客观存在的,只是__attribute__关键字出现以前,没有统一的表达形式而已。static、const、inline、stdcall都可以算是函数的属性。


作者: goojje    时间: 2012-05-28 16:40

我是来打醋的
作者: walleeee    时间: 2012-05-28 17:00
回复 94# OwnWaterloo


    你是不是准备退出江湖了?被我吓破胆了?
作者: starwing83    时间: 2012-05-28 19:49
我觉得自己对楼主似乎没什么话好说的……恩,留个名……
作者: KBTiller    时间: 2012-05-28 19:54
事实标准?
没有标准前K&R的书被认为是"事实标准"
才有了标准之后就没听说过“事实标准”这种说法了
作者: starwing83    时间: 2012-05-28 19:56
回复 99# KBTiller


    我觉得楼主很有点目中无人的味道。
作者: 三月廿七    时间: 2012-05-28 20:04
本帖最后由 三月廿七 于 2012-05-28 20:18 编辑
walleeee 发表于 2012-05-28 15:16
回复 40# wwwsq


"万物皆对象"  是一种特别扭曲的思维,天打雷劈的思维 ,!
我当时就被 面向对象 忽悠到爪哇国去了,逼的我不得不看小说来纠正被面向对象扭曲的思维

浮躁的人、追求完美的人、追求数据结构原子化的人 玩不来面向对象,
那种东西特别扭曲、特别压抑、特别微妙、特别繁琐

从现在的主流编程语言来看, 我算是比较进步的了

作者: wwwsq    时间: 2012-05-28 20:05
starwing83 发表于 2012-05-28 19:56
回复 99# KBTiller



这几个帖子是有点嚣张,不过目标很明确,是某个不懂装懂的某昏昏。

山中无老虎,也轮不到毛毛虫称霸王,阿猫阿狗还在呢。

作者: KBTiller    时间: 2012-05-28 20:08
starwing83 发表于 2012-05-28 19:56
回复 99# KBTiller

其实如果说的真有道理的话
目中无人我个人倒是不太介意的
不过呢 ……




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2