- 论坛徽章:
- 0
|
回复 92# walleeee
>> >>int x[], int[] x
>>这个只是个人喜好,我觉得并不是什么大问题,前面一种侧重说明x的元素都是int类型,而后面一种侧重说明x是一个int[]的类型。一个强调元素,一个强调变量本身。但是它们的功能在编译层面来说都是等价的,不知道你同意不?
表面上来看这样是没错。但是你归纳一下语法,再考虑一下当这种规则递归使用的复杂性的时候,可能就不会这么认为了。
举个例子:
http://bbs.chinaunix.net/thread-3619087-1-2.html
void (*tpsetunsol (void (_TMDLLENTRY *)(*disp) (char *data, long len, long flags))) (char *data, long len, long flags);
读起来爽么?写起来爽么?为什么这种东西能顺理成章地招摇过市?(编译器大概是没啥感觉……)
(严格来说还有那么点不公平:这里人一眼看过去很快搞清具体声明的是哪个标识符是不太靠谱的;机器可以和前面已经声明过的标识符比对,一有问题就罢【河蟹】工。)
再想想lisp之类如果改用中缀表达式那会如何?
编译层面是等价的,是的,对机器而言如此(标识符超长之类不考虑的话);但是,别忘了,这些代码的一部分价值来源于可以给人类阅读。既然如此,容易高效读写的东西好呢,还是顺应历史,认为很容易导致低效的方法更好?
>>这个是没办法的,要看当时的机器工艺,cpu对处理这些数据使用了不同的指令支持,另外,这些数据类型不同,在cpu级别上的效率也有很大的差异,一般来说,整数倍处理器字长的数据,处理越快。而C的设计是为了解决汇编对人的负担带大的问题,但是又不可能忽略掉机器性能和内存存储的要求,至少在那个年代是这个样子。当然,现在这一点大多数时候已经不那么非常重要。
于是时代的眼泪要与C共生共死么。
>>其实我觉得,asm/C/C++等是一代的,其后的Java/C#/...才是真正的高级语言。但是并不是说asm/C/C++不高级,只是用途不一致罢了:)
倒是有那么点感觉。不过C++离asm/C渐行渐远了。 |
|