高手眼中的 TC 高手眼中的 爱,就大声说出来,因为你永远都不会知道,明天和意外, 哪个会先来! 石头记告诉我们: 凡是真心爱的最后都散了, 凡是混搭的最后都团圆了。你永远看不到我最寂寞的时候, 因为在看不到你的时候就是我最寂寞的时候!高手眼中的 TC 给使用 TC 的初学者的一篇文章——作者:雨中飞燕前言: “ TC 过时了”, 我说。接着就一堆人问,“为什么过时啊? ”,“TC 不是很好用吗”, “教材上也是用这个啊”, 于是乎我已经无语了。/---------------------------------------------------------- ------------/ 一。头文件的问题好了, 来看个经典的 TC2 下在老潭的书的《C 语言程序设计( 第二版)》, 第4 页的一段代码: main( ){ printf("This isaC program.\n"); } 好了,当时的 TC2 的确允许使用 printf 和 scanf 可以不加头文件, 也的确允许 main() 这样的声明。允许是允许了,可是你写成这样对你有好处吗? 打个比方, Basic 语言知道吗?这种语言可以不声明变量就使用。的确同样也是允许了, 可是给我的话, 我会要求编译器强制检查变量是不是声明了再使用。为什么?如果你需要用名字是 nlen 这个变量,当中有一个不小心写成 n1en , 不强制检查的话, 编译器不告诉你错, 但运行结果是错误的。但这种错误要是在很多行代码里你怎么找?特别是'l' 和'1' 如此相似。编译器虽然允许,但你别以为那样写就是好事。说回刚刚的 C 代码, TC2 允许不加头文件, 于是不少初学的人习惯了从不写头文件, 以为 C 语言不需要头文件似的。好了,等到看到那本书的 18 页,那个字符输入输出,用了 gets , 就突然多了一个#include <> ,仔细一看,那一页中间有 100 来字强调了要用库函数, 可是没有讲怎么用, 下面多了的那一行初学者也可能会觉得奇怪, 要是不理解的人就跳过了, 要是没留意的更不当一回事了, 谁让之前书里一直都没有那句呢。然后,当有的初学者用 打代码的时候,编译提示说 scanf 没有声明( 或者是用 TC2 的打了 gets 函数说 gets 没有声明), 他们就郁闷了, 都是按照书的代码啊, 都一模一样还会错?于是跑来论坛问。有跑来问的还好, 最怕的就是用 TC2 的, 看了数组觉得难还跳了过去的, 于是一直都不会写头文件, 成了习惯。要是随便换个环境, 结果没写头文件的, 错了, 结果还说自己写 C 代码写那么多, 这里怎么就错了, 然后就怀疑编译器是不是坏的。然后就借口说这个用不习惯要换 TC2 。结果就是恶性循环,跳不出 TC2 ,学不到新领域的东西。论坛上这种代码绝不少见, 随便翻一些提问帖子肯定找得到。其实早在 已经不再允许 scanf 和 printf 不加头文件了,随后的所有 C 编译器也不再支持 TC2 的这个特性了。/---------------------------------------------------------- ------------/ 二。 main 的声明其实如果只是算潭书的第二版,这个无类型的 main 声明没有问题, 只是直到 C99 标准的出现, 这个声明才彻底废除。其实也是同样一个问题, 允许你不写, 但这不是说你这样用就是好事。不过, 这个的后果有点不一样的就是, 你忽略不写, 很可能以为是不需要返回的, 或者是以为返回一个无类型的( void ), 接着就出现了 main 函数里不写 return 0; 的问题。那本书就是从头到尾所有 main 函数一律没有 return 0; 。好了, 等到学了函数那章,书上说,没有返回值的函数应该要用 void 来声明,好了, void main 就这样诞生了。不信就看看谭书的第三版,变成从头到尾的 void main() 。不过话说回头, 这样的问题对于初学者学习基本语法和结构方面和写写小程序的都不会出现任何影响。在编译器上来说, 这只是一个标准的问题, 但对于你来说别小看了这么一点点的变化。因为你习惯了 main 这种写法的话,必然会把这个习惯带到编写其它函数里(这里暂且不讲 main 本身返回值的问题)。举个简单例子,写以下代码: #include <> factorial(int n) { if(n==1)return 1; else if(n>1)return n* factorial(n-1); } int main(void) { int n; while(scanf("%d", &n),n>=0
高手眼中的TC 来自淘豆网m.daumloan.com转载请标明出处.