/----------------------------------------------------------------------/
一。頭文件的問題
好了,來看個經(jīng)典的TC2下在老潭的書的《C語言程序設計(第二版)》,
第4頁的一段代碼:
main( )
{
printf("This is a C program.\n");
}
好了,當時的TC2的確允許使用printf和scanf可以不加頭文件,
也的確允許main()這樣的聲明。允許是允許了,可是你寫成這樣對你有好處嗎?
打個比方,Basic語言知道嗎?這種語言可以不聲明變量就使用。
的確同樣也是允許了,可是給我的話,我會要求編譯器強制檢查變量是不是聲明了再使用。
為什么?如果你需要用名字是nlen這個變量,當中有一個不小心寫成n1en,
不強制檢查的話,編譯器不告訴你錯,但運行結(jié)果是錯誤的。但這種錯誤要是在很多行
代碼里你怎么找?特別是'l'和'1'如此相似。
編譯器雖然允許,但你別以為那樣寫就是好事。說回剛剛的C代碼,TC2允許不加頭文件,
于是不少初學的人習慣了從不寫頭文件,以為C語言不需要頭文件似的。
好了,等到看到那本書的138頁,那個字符輸入輸出,用了gets,
就突然多了一個#include <stdio.h>,仔細一看,那一頁中間有100來字強調(diào)
了要用庫函數(shù),可是沒有講怎么用,下面多了的那一行初學者也可能會覺得奇怪,
要是不理解的人就跳過了,要是沒留意的更不當一回事了,誰讓之前書里一直都
沒有那句呢。然后,當有的初學者用TC3.0打代碼的時候,編譯提示說scanf沒有
聲明(或者是用TC2的打了gets函數(shù)說gets沒有聲明),他們就郁悶了,
都是按照書的代碼啊,都一模一樣還會錯?于是跑來論壇問。有跑來問的還好,
最怕的就是用TC2的,看了數(shù)組覺得難還跳了過去的,于是一直都不會寫頭文件,
成了習慣。要是隨便換個環(huán)境,結(jié)果沒寫頭文件的,錯了,結(jié)果還說自己寫C代碼
寫那么多,這里怎么就錯了,然后就懷疑編譯器是不是壞的。然后就借口說這個
用不習慣要換TC2。結(jié)果就是惡性循環(huán),跳不出TC2,學不到新領域的東西。
論壇上這種代碼絕不少見,隨便翻一些提問帖子肯定找得到。其實早在TC3.0已經(jīng)
不再允許scanf和printf不加頭文件了,隨后的所有C編譯器也不再支持TC2的
這個特性了。