免费注册 查看新帖 |

Chinaunix

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

531,继续抽某昏昏 [复制链接]

论坛徽章:
0
131 [报告]
发表于 2012-09-25 01:13 |只看该作者
回复 129# pmerofc


有。object可以是无名的,比如返回结构体对象。variable一定是和名称有关,C中只能通过对象声明引入。

论坛徽章:
0
132 [报告]
发表于 2012-09-25 01:31 |只看该作者
幻の上帝 发表于 2012-09-25 01:13
回复 129# pmerofc



所以有人会提出anonymous variable的提法。这个提法有点纠结,就像说“没轮子的汽车”一样。“没轮子的汽车”算汽车吗?

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
133 [报告]
发表于 2012-09-25 07:49 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
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
134 [报告]
发表于 2012-09-25 08:38 |只看该作者
回复 128# 幻の上帝


   
In computer programming, a variable is a storage location and an associated symbolic name  which contains some known or unknown quantity or information, a value.


仔细看这段话,变量一个存储位置一个对应的符号名字,它(不知道这里指名字还是指变量)包含一些已知或者未知的信息或者属性,和值。

这里的它我认为指变量而不是指“一个对应的符号名字”,这样解释是很自然的。

由此,变量名(一个对应的符号化名字)显然是变量的组成部分之一。

而,如果变量名允许参与某些部分(比如表达式),那么是不是说变量的某个部分参与了表达式?是不是可以说变量参与了表达式?中国派出一个代表团(中国人的一部分)参加了ACM竞赛,是不是就可以直接说中国参与了ACM竞赛?显然是可以的。

那么,变量是表达式,这个说法的确切含义是,变量的一部分可以被当做表达式。我觉得这是没有问题的。毕竟变量的另外几个部分(类型什么的)是无法被当做表达式的。

论坛徽章:
0
135 [报告]
发表于 2012-09-25 11:06 |只看该作者
starwing83 发表于 2012-09-25 08:38
回复 128# 幻の上帝



你可以说门牌号是数字,但你不能说那栋大楼是数字。

门牌号确实是那栋大楼的属性的一部分,就像symbolic name是variable的一部分。

大楼确实不是数字,variable也确实不是expression。

论坛徽章:
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
136 [报告]
发表于 2012-09-25 11:34 |只看该作者
回复 135# wwwsq


    不不不,你这种理解是错误的。表达式不是一种“种类”,不是跟“人”、“数字”这种“类别”相同的东西。表达式应该算作一种可以“参与”的东西。(参与计算)。本身表达式是表示一种计算,只能说某个元素“能”参与计算,或者“不能”参与计算,而不能说一个元素“是”计算。这就是“表达式”这个概念和“大楼”这个概念最不同的地方。类比起来,表达式这个概念应该是和“比赛”这个概念相似的。都是可以参与与否。你总不能说你去参加ACM比赛,你就是ACM比赛了吧?

所以,只要你的一部分有能力参与到表达式的计算中,作为表达式中计算的某个“零件”(确切的说,主表达式这个零件),那么就可以说你参与了这个计算。因此,变量名的确是可以作为一个元素参与进计算的。因此变量可以参与表达式的计算。即变量是表达式(这里的“是”不是is-a的意思,是join-in的意思)。

但是,在某种情况下,表达式的确是一个”种类“,什么情况呢?显然是编译的时候,很多编译器里面都有Expression这个类,包括clang,即使在Lua里面也有个结构体叫exprdesc。在这种情况下,显然不允许说变量是表达式。这时只能说标示符是表达式,而且这个”是“是is-a的关系。问题是,在编译期是没有变量存在的吧?变量是个运行期概念(详见维基百科variable说明),这就如同程序和进程的关系一样。你能说程序是个文件,但是你能说进程(动态的)是个文件么?不行吧?因此,在编译期,的确,标示符是表达式(的一种),而这时没有变量这个概念存在。在运行期。变量参与表达式的计算,而这时没有标示符(甚至变量名)的存在。

这么讨论,严格意义上来说,说变量是表达式是没有意义的(和我之前观点相同),真正严格的说法是:对C语言来说,标示符是一种表达式。而在C程序运行时,这个标示符代表的变量参与了表达式表示的计算过程。即”变量参与了表达式计算“,这个说法比”变量是表达式“要严格,但是这不代表这个不严格的说法就不对。

至于“变量不是表达式”,无论在什么情况下,都是不对的。

论坛徽章:
0
137 [报告]
发表于 2012-09-25 11:38 |只看该作者
wwwsq 发表于 2012-09-25 11:06
你可以说门牌号是数字,但你不能说那栋大楼是数字。

门牌号确实是那栋大楼的属性的一部分,就像sy ...
                       
给勘误一下:Variable也确实不是expressionvariable也确实不属于expression的一种形式。

论坛徽章:
0
138 [报告]
发表于 2012-09-25 11:56 |只看该作者
回复 136# starwing83


不,你搞反了。对于任何具体或抽象的语言来说,表达式首先是一种语法形式而非实体。确定形式之后才讨论语义。只有刻意回避表达形式才可以脱离语法只提语义,但这时候表达式就没什么非要讨论的意义了,远不如讨论计算行为本身。
另外,至少C和C++等的语言规则中只对用户约定了前者,而如何引用后者需要语言实现者考虑。
在编译期是没有变量存在的吧?

照你的意思,在编译期也没有变量名存在?还是说你现在同意变量名不是变量的组成部分了?

论坛徽章:
0
139 [报告]
发表于 2012-09-25 11:57 |只看该作者
回复 133# pmerofc

嗯,微妙的不同。参照C++里有正式定义的概念来说的。

论坛徽章:
0
140 [报告]
发表于 2012-09-25 11:58 |只看该作者
回复 135# wwwsq


    同意这楼。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP