老是又小伙伴在群里說(shuō)我的代碼是按照書(shū)上的代碼敲的,就是編譯不過(guò)?想不通呀!目前市面上的一些書(shū)都是十來(lái)年以前編寫的了,你不幸看的還是這些書(shū),錯(cuò)誤原因就在這里。
比如譚浩強(qiáng)的C語(yǔ)言程序設(shè)計(jì)這個(gè)本書(shū)都出了N版了,而我們?cè)诳春茉绲陌姹?。時(shí)代在發(fā)展,在大家都在用vs2015了,C語(yǔ)言最新標(biāo)準(zhǔn)也換成了C11。你說(shuō)你按照老版本書(shū)上的例子敲代碼,編譯不出錯(cuò)基本上都是幸運(yùn)的了。
所以小伙伴們一定要注意了,你買書(shū)不要急著去看里面的知識(shí)。作者序你一定要看,它是在什么環(huán)境下寫的,都講些什么,計(jì)算機(jī)類的書(shū)基本上都會(huì)寫上適用范圍,開(kāi)發(fā)環(huán)境等。如果一本書(shū)這方面都沒(méi)有,那他肯定不是一本好書(shū)。
選好一本書(shū),對(duì)于學(xué)習(xí)編程很重要。選網(wǎng)上大家都推薦的,大家說(shuō)好才是真的好。你也不想我敲個(gè)例子都一大堆錯(cuò)誤等著吧。真是這個(gè)樣子你殺人的心都會(huì)有的。書(shū)本身的問(wèn)題讓人痛絕。但不全是書(shū)本自身的問(wèn)題。上面我們提到的標(biāo)準(zhǔn)也是重要的一環(huán),誠(chéng)然又好多開(kāi)源代碼在以前的gcc版本是能編譯過(guò)的,那時(shí)候的編程還是如c89,c99。后邊的標(biāo)準(zhǔn)越來(lái)越嚴(yán)格了。誰(shuí)都喜歡新東西,搞開(kāi)發(fā)也一樣,你說(shuō)window 10 出來(lái)了, 你是不是癢癢的要把window 7 換了。而本身編譯工具也是在不斷更新。標(biāo)準(zhǔn)差異再所難免。
為什么按照書(shū)上的代碼,編譯老是出錯(cuò)?
C標(biāo)準(zhǔn)到底何也? ANSI C 是由ANSI 制定的C語(yǔ)言標(biāo)準(zhǔn)。常見(jiàn)的編譯器都按此標(biāo)準(zhǔn)設(shè)計(jì)。所以用ANSI C語(yǔ)言標(biāo)準(zhǔn)寫的C程序, 各編譯器都能識(shí)別,編譯。這個(gè)對(duì)于編譯器實(shí)現(xiàn)很重要,要不然老版本的代碼用新的編譯器編譯又問(wèn)題。標(biāo)準(zhǔn)在不斷規(guī)范。所以以前寫的代碼規(guī)范與現(xiàn)行的不一致就會(huì)導(dǎo)致編譯錯(cuò)誤了。重不重要等你寫代碼維護(hù)版本就知道了。
上面說(shuō)到的編譯器,本身也是又差異的你能說(shuō)vs的cc能跟gcc一樣? 比如C99相對(duì)于C89來(lái)說(shuō)增加了很多特性,比如說(shuō)新的關(guān)鍵字,數(shù)據(jù)類型,變長(zhǎng)數(shù)組,國(guó)際化特征等等,一般來(lái)說(shuō),現(xiàn)在的C編譯器都能很好的符合C89標(biāo)準(zhǔn),而C99標(biāo)準(zhǔn)至今還沒(méi)有很好的普及,比如說(shuō)微軟直到VC2010依然沒(méi)有符合C99標(biāo)準(zhǔn)。
為什么按照書(shū)上的代碼,編譯老是出錯(cuò)?
說(shuō)了這么多按照書(shū)上的例子敲代碼編譯出錯(cuò)我們一定要知道,書(shū)中的例子是基于那個(gè)標(biāo)準(zhǔn)的,我們用的編譯器支不支持這個(gè)標(biāo)準(zhǔn)。
如果在學(xué)習(xí)中遇到困惑可以直接加編程導(dǎo)師微信號(hào)coderonline,獲取自學(xué)指南。