/----------------------------------------------------------------------/
一。头文件的问题
好了,来看个经典的TC2下在老潭的书的《C语言程序设计(第二版)》,
第4页的一段代码:
main( )
{
printf("This is a C program.\n");
}
好了,当时的TC2的确允许使用printf和scanf可以不加头文件,
也的确允许main()这样的声明。允许是允许了,可是你写成这样对你有好处吗?
打个比方,Basic语言知道吗?这种语言可以不声明变量就使用。
的确同样也是允许了,可是给我的话,我会要求编译器强制检查变量是不是声明了再使用。
为什么?如果你需要用名字是nlen这个变量,当中有一个不小心写成n1en,
不强制检查的话,编译器不告诉你错,但运行结果是错误的。但这种错误要是在很多行
代码里你怎么找?特别是'l'和'1'如此相似。
编译器虽然允许,但你别以为那样写就是好事。说回刚刚的C代码,TC2允许不加头文件,
于是不少初学的人习惯了从不写头文件,以为C语言不需要头文件似的。
好了,等到看到那本书的138页,那个字符输入输出,用了gets,
就突然多了一个#include <stdio.h>,仔细一看,那一页中间有100来字强调
了要用库函数,可是没有讲怎么用,下面多了的那一行初学者也可能会觉得奇怪,
要是不理解的人就跳过了,要是没留意的更不当一回事了,谁让之前书里一直都
没有那句呢。然后,当有的初学者用TC3.0打代码的时候,编译提示说scanf没有
声明(或者是用TC2的打了gets函数说gets没有声明),他们就郁闷了,
都是按照书的代码啊,都一模一样还会错?于是跑来论坛问。有跑来问的还好,
最怕的就是用TC2的,看了数组觉得难还跳了过去的,于是一直都不会写头文件,
成了习惯。要是随便换个环境,结果没写头文件的,错了,结果还说自己写C代码
写那么多,这里怎么就错了,然后就怀疑编译器是不是坏的。然后就借口说这个
用不习惯要换TC2。结果就是恶性循环,跳不出TC2,学不到新领域的东西。
论坛上这种代码绝不少见,随便翻一些提问帖子肯定找得到。其实早在TC3.0已经
不再允许scanf和printf不加头文件了,随后的所有C编译器也不再支持TC2的
这个特性了。
本文导航
- 第1页: 首页
- 第2页: 头文件的问题
- 第3页: main的声明
- 第4页: 函数声明与返回值
- 第5页: 代码风格
- 第6页: TC图形库
- 第7页: 越界检查
- 第8页: 结束语