实在是受不了C的某些标准,你说呢
本帖最后由 yqj2065 于 2013-06-06 11:07:32 编辑 拜读飞天御剑流的左值性博文,偶实在是受不了C标准中的这些东西。【注:我认为飞天御剑流的文章是很有意义的,我仅仅是说受不了C标准】
当我们把一个小学生的文章作为范本,要求大家都按照他的风格写作文,并为该小学生的文章制订标准,可以想象是多么蛋疼的事情。【比喻,勿喷】
如果把C所有的语法元素全部还在桌面上,将能够作为左值的东西还在一起(还要知道不能够作为左值的东西),从中抽象出左值概念,就得到C标准的lvalue。问题是,作为左值的东西中,有一些无聊的东西。
int *p;
*p=5;
"p虽然没有指向一个有效对象,但这里的*p显然仍是一个左值,C89的定义排除了这种情况,不太合理,这个失误在C99中得到了修正,C99不再规定左值必须指示一个有效对象",这里就是一个无聊的东西。
标准(编译器的级别还不够)就应该要求局部变量必须被初始化。一个不知道指向哪里的p,怎么能够允许它随随便便地解引用。关键是,c89和c99还在这种无聊的问题上摇摇摆摆,实在是令人难受。 标准 纯C
[解决办法]
工具而已总是会有缺陷的,关键在于用它的人。
[解决办法]
int *p;
p = 1234;
*p = 5;
lz认为这个1234是否是有效对象?如过不允许这么做,那么读一些固定内存地址里的数据就没法实现了。允许的话,随便给个值就是有效对象?
[解决办法]
只有被骂的语言和不被使用的语言。
[解决办法]
把有限的生命浪费在品尝/品鉴无穷多种的语法糖中,我认为不值当。
[解决办法]
好吧
int * p = NULL;
*p = 5; // 这里还是错误啊,编译器还是搞不定的
也许LZ定义的“标准”能够强制指针要有所指(语法层面),但是不能保证指针的指向有意义(语义层面),所以更多的因素还是在与用语言的人
x == 5;就真的是meanlingless?
LZ是否知道有种情形,未使用的变量编译器是可以给warning的,提示人有东西没有用到,所以逻辑可能有问题;但是假定是有洁癖的人,他可能就会写一条无意义的语句,来用到这个变量,以消除warning
比如写句(void *)x;又如写句x == 5;
是不是在LZ看来meaningless的东西就不应该允许?
人的意图是千奇百怪的,作为标准是不太可能“八面玲珑”的。
[解决办法]
你开发的时候应该不会遇到这种理论问题。
[解决办法]
C诡异离奇,缺陷重重,却获得了巨大的成功