- 论坛徽章:
- 8
|
本帖最后由 shan_ghost 于 2010-04-14 13:48 编辑
关联=be referenced by:
The variable can be referenced by identifiers
接上面:
c语言中,函数名,结构名也可以成为标识符,这个怎么解释?
water_wf 发表于 2010-04-14 12:54 ![]()
这个问题正好说明了把概念弄明白的好处所在。
标识符就是个名字,你管他是函数名、结构名还是变量名呢?
写编译器,不丢掉标识符的具体含义,你有办法写出语法分析模块吗?
例如:
x=max(a,b) * c
max是宏还是函数,写语法分析时需要关心吗?进一步说,反正它执行后就会得到一个匿名的变量,而我们关心的只是这个变量——那么,又何必区分它究竟是变量还是函数呢?一视同仁为“标识符”能省多少事。
(这就是所谓:表达式是通过运算符连接起来的一组标识符/立即数;单个标识符/立即数也是表达式)
再比如,161楼的英文有这么一句话——内存地址是具体内存单元的一个标识符——好吧,如果这样理解,那么就有:
int i
i是个标识符,关联了某个变量
&i的结果是0x123456,而0x123456又是个标识符,它关联了某个内存位置
ax也是个标识符,它关联了某个寄存器
具体实现上,i关联的变量又和0x123456关联的内存位置或者ax关联的寄存器相当——所以变量本身是个抽象概念,既不等于内存单元也不等于寄存器。
所以,解析源代码时,编译器只管弄明白i代表了一个变量就够了;
实际执行时,i可以随时改变关联——比如关联到寄存器ax/bx;关联到内存地址0x123456;关联到二级缓存的某个位置……
随便它如何关联,只要通过标识符i仍然能关联到这个变量当前的正确值,这就够了。
正是这种灵活性,为编译优化/CPU指令优化留下了大量的空间。
说句题外话:
正规的科学概念就是如此严谨,可以随便你用各种方式钻牛角尖而不错乱——当然,钻牛角尖的“各种方式”也是有严谨定义的,比如什么是概念、概念的内涵和外延;什么是逻辑等待。
当你真学会的时候,就会发现科学体系是如此的严谨,一字之差就谬以千里;但同时这个体系又是如此的简洁,只要很少一些基本概念理解正确了,整个体系就可以从任何一个概念出发整个拎起来,毫无晦涩之处,毫无必须死记硬背之处。
而要达到这个境界,就必须下功夫把每一个概念彻底拎清。
垃圾书的危害,就在于这些细小概念的混淆以及思维方式、逻辑上面的混乱。正是这种种细微的混淆之处,导致大局上无法自圆其说——或者说,经不起推敲。
而经不起推敲的东西想存在下去,就必须禁止推敲——所以,学垃圾书,你就必须学会死记硬背。拿它的结论、它的具体操作方法去套,你肯定是能得到正确结果的:但为什么会得到正确结果?你不会知道,也不再有能力知道。
细节拎不清并且还禁止拎清,那么,可想而知,你将永远失去思考的能力。
所以,真正学会了的人,并不会比那些学岔了的人多知道多少东西——多高级的概念都能找到书,不是吗?
但,真正学会的人,会真正深刻理解每个词甚至每个字的含义,并且知道可以如何用这些字这些词拼出已有或者尚不存在的高级概念。
而一个学岔了的人——面对各种形状不规则、七扭八歪的砖块,他能盖起高楼吗? |
|