C語言預(yù)處理命令總結(jié)大全_第1頁
C語言預(yù)處理命令總結(jié)大全_第2頁
C語言預(yù)處理命令總結(jié)大全_第3頁
C語言預(yù)處理命令總結(jié)大全_第4頁
C語言預(yù)處理命令總結(jié)大全_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、C語言預(yù)處理命令總結(jié)大全(2012-02-13 17:18)標簽:C語言 預(yù)處理 分類:C編程C程序的源代碼中可包括各種編譯指令,這些指令稱為預(yù)處理命令。雖然它們實 際上不是C語言的一部分,但卻擴展了 C程序設(shè)計的環(huán)境。本節(jié)將介紹如何應(yīng)用 預(yù)處理程序和注釋簡化程序開發(fā)過程,并提高程序的可讀性。ANSI標準定義的C 語言預(yù)處理程序包括下列命令:#defi ne ,#error ,# in elude , #if , #else , #elif , #en dif , #ifdef , #if ndef ,#undef, #line , #pragma等。非常明顯,所有預(yù)處理命令均以符號 #開頭,

2、下面 分別加以介紹。一 #defi ne命令#define定義了一個標識符及一個串。在源程序中每次遇到該標識符時, 均以定義的串代換它。ANSI標準將標識符定義為宏名,將替換過程稱為宏替換。 命令的一般形式為:#define identifier string1該語句沒有分號。在標識符和串之間可以有任意個空格,串一旦開始,僅 由一新行結(jié)束。2宏名定義后,即可成為其它宏名定義中的一部分。3宏替換僅僅是以文本串代替宏標識符,前提是宏標識符必須獨立的識別出來,否則不進行替換。例如:#defi ne XYZ this is a tes使用宏printf("XYZ"); /該段不打印

3、"this is a test"而打印"XYZ"。因為預(yù)編譯器識別出的是"XYZ"4如果串長于一行,可以在該行末尾用一反斜杠'續(xù)行。#defi neLONG_STRING"this is a very longstri ng that is used as an example"5 C語言程序普遍使用大寫字母定義標識符。6用宏代換代替實在的函數(shù)的一大好處是宏替換增加了代碼的速度,因為不存在函數(shù)調(diào)用的開銷。但增加速度也有代價:由于重復(fù)編碼而增加了程序長 度。二 #error命令#error強迫編譯程序停止編譯

4、,主要用于程序調(diào)試。#error指令使預(yù)處理器發(fā)出一條錯誤消息,該消息包含指令中的文本.這條指令的目的就是在程序崩潰之前能夠給出一定的信息。三 #in elude命令# i n elude使編譯程序?qū)⒘硪辉次募度霂в?in elude的源文件,被讀入的源文件必須用雙引號或尖括號括起來。例如:# include"stdio.h"或者# include<stdio.h>這兩行代碼均使用C編譯程序讀入并編譯用于處理磁盤文件庫的子程序。將文件嵌入# i nelude命令中的文件內(nèi)是可行的,這種方式稱為嵌套的嵌入 文件,嵌套層次依賴于具體實現(xiàn)。如果顯式路徑名為文件標識符

5、的一部分,則僅在那些子目錄中搜索被嵌入文件。否則,如果文件名用雙引號括起來,貝U首先檢索當前工作目錄。如果未發(fā) 現(xiàn)文件,則在命令行中說明的所有目錄中搜索。如果仍未發(fā)現(xiàn)文件,則搜索實 現(xiàn)時定義的標準目錄。如果沒有顯式路徑名且文件名被尖括號括起來,則首先在編譯命令行中的目錄內(nèi)檢索。如果文件沒找到,則檢索標準目錄,不檢索當前工作目錄。四條件編譯命令有幾個命令可對程序源代碼的各部分有選擇地進行編譯,該過程稱為條件編譯。商業(yè)軟件公司廣泛應(yīng)用條件編譯來提供和維護某一程序的許多顧客版本。#if、#else,#elif 及#6門dif#if的一般含義是如果#if后面的常量表達式為true,則編譯它與#endi

6、f之 間的代碼,否則跳過這些代碼。命令#endif標識一個#if塊的結(jié)束。#if con sta nt-expressio nstateme nt seque nee#en difEg:#define MAX 91#i nclude <iostream>using n amespace std;int mai n()#if MAX > 99cout<<"MAX is bigger than 99"<<e ndl;#elif MAX > 90cout<<"MAX is bigger than 90"

7、;<<e ndl;#elsecout<<"MAX is smaller than 90"<<e ndl;#en difreturn 0;跟在#if后面的表達式在編譯時求值,因此它必須僅含常量及已定義過的標 識符,不可使用變量。表達式不許含有操作符sizeof (sizeof也是編譯時求值)。#else 命令的功能有點象 C 語言中的 else ;#else 建立另一選擇(在 #if 失 敗的情況下)。注意, #else 屬于 #if 塊。#elif 命令意義與 ELSE IF 相同,它形成一個 if else-if階梯狀語句,可進行多種編

8、譯選擇。 #elif 后跟一個常量表達式。如果表達式為 true ,則編譯 其后的代碼塊,不對其它 #elif 表達式進行測試。否則,順序測試下一塊。#if expression statement sequence #elif expression1 statement sequence #endif在嵌套的條件編譯中#endif、#else或#elif 與最近#if或#elif 匹配。# ifdef和# ifndef條件編譯的另一種方法是用#ifdef與#ifndef命令,它們分別表示"如果有 定義"及"如果無定義 "。 # ifdef 的一般形式是

9、:# ifdef macronamestatement sequence#endif#ifdef 與#ifndef 可以用于#if、#else , #elif 語句中,但必須與一個#endif#define MAX 91#include <iostream>using namespace std;int main()#ifdef MAXcout<<"hello,MAX!"<<endl;#elsecout<<"where is MAX?"<<endl;#endif#ifndef LEO cout&

10、lt;<"LEO is not defined"<<endl;#endifreturn 0;命令#undef取消其后那個前面已定義過有宏名定義。一般形式為:#un def macro name命令#line改變_LINE_與_FILE_的內(nèi)容,它們是在編譯程序中預(yù)先定義 的標識符。命令的基本形式如下:#line nu mber"file name"其中的數(shù)字為任何正整數(shù),可選的文件名為任意有效文件標識符。行號為源 程序中當前行號,文件名為源文件的名字。命令#line主要用于調(diào)試及其它特殊應(yīng)用。注意:在#line后面的數(shù)字標識從下一行開始

11、的數(shù)字標識。#line 100 "jia"cout«"#li ne cha nge line and file name!"«e ndl; /line 100cout«_LINE_<<e ndl; /101cout«_FILE_<<e ndl; /jia五 #pragma命令#pragma為實現(xiàn)時定義的命令,它允許向編譯程序傳送各種指令。#pragma的作用是設(shè)定編譯器的狀態(tài)或者是指示編譯器完成一些特定的動作。#pragma指令對每個編譯器給出了一個方法,在保持與C和C+語言完全兼容的情況下

12、,給出主機或操作系統(tǒng)專有的特征。依據(jù)定義,編譯指示是機器或操作系統(tǒng)專有的,且對于每個編譯器都是不同的。其格式一般為:#Pragma Para1 message 參數(shù)。Message參數(shù)能夠在編譯信息輸岀窗口中輸岀相應(yīng)的信息,這對于源代碼信息的控制是非常重要的。其使用方法為:#pragma message(消息文本”)當編譯器遇到這條指令時就在編譯輸出窗口中將消息文本打印出來。當我們在程序中定義了許多宏來控制源代碼版本的時候,我們自己有可能都會忘記有沒有正確的設(shè)置這些宏,此時我們可以用這條指令在編譯的時候就進行檢查。假設(shè)我們希望判斷自己有沒有在源代碼的什么地方定義了 _X86這個宏可以用下面的方

13、法#ifdef _X86#pragma message( “ _X86 macro activated! ”)#en dif當我們定義了 _X86這個宏以后,應(yīng)用程序在編譯時就會在編譯輸岀窗口里顯示“_X86 macro activated!。我'們就不會因為不記得自己定義的一些特定的宏而抓耳撓腮了。2 code_seg 參數(shù)。格式如:#pragma code_seg( "secti on-n ame","secti on-class")它能夠設(shè)置程序中函數(shù)代碼存放的代碼段,當我們開發(fā)驅(qū)動程序的時候就會使用到它。3 #pragma once (比

14、較常用)只要在頭文件的最開始加入這條指令就能夠保證頭文件被編譯一次。這條指令實際上在 VC6中就已經(jīng)有了,但是考慮到兼容性并沒有太多的使用它。4 #pragma hdrstop表示預(yù)編譯頭文件到此為止,后面的頭文件不進行預(yù)編譯。BCB可以預(yù)編譯頭文件以加快鏈接的速度,但如果所有頭文件都進行預(yù)編譯又可能占太多磁盤空間,所以使用這個選項排除一些頭文件。有時單元之間有依賴關(guān)系,比如單元A依賴單元B,所以單元B要先于單元 A編譯。你可以用#pragma startup指定編譯優(yōu)先級,如果使用了#pragma package(smart_init) , BCB就會根據(jù)優(yōu)先級的大小先后編譯。5 #prag

15、ma resource "*dfm"表示把*.dfm文件中的資源加入工程。*.dfm中包括窗體外觀的定義6 #pragma warni ng( disable : 4507 34; on ce : 4385; error : 164 )等價于:#pragma warning(disable:4507 34)/* 不顯示4507和34號警告信息。 如果編譯時總是岀現(xiàn) 4507號警告和34號警告,而認為肯定不會有錯誤,可以使用這條指令。*/#pragma warning(once:4385) / 4385 號警告信息僅報告一次#pragma warning(error:164)

16、 / 把164號警告信息作為一個錯誤。同時這個pragma warning 也支持如下格式:#pragma warning( push ,n )#pragma warning( pop )這里n代表一個警告等級(1-4)。#pragma warning( push )保存所有警告信息的現(xiàn)有的警告狀態(tài)。#pragma warning( push, n)保存所有警告信息的現(xiàn)有的警告狀態(tài),并且把全局警告等級設(shè)定為n。#pragma warning( pop )向棧中彈岀最后一個警告信息,在入棧和岀棧之間所作的一切改動取消。 例如:#pragma warning( push )#pragma warn

17、ing( disable : 4705 )#pragma warning( disable : 4706 )#pragma warning( disable : 4707 )/.#pragma warning( pop )在這段代碼的最后,重新保存所有的警告信息(包括4705,4706和4707)。7 pragma comme nt(.)該指令將一個注釋記錄放入一個對象文件或可執(zhí)行文件中。常用的lib關(guān)鍵字,可以幫我們連入一個庫文件。8 progma pack ( n)指定結(jié)構(gòu)體對齊方式。#pragma pack(n)來設(shè)定變量以 n字節(jié)對齊方式。n字節(jié)對齊就是說變量存放的起始地址的偏移量有兩

18、種情況:第一、如果n大于等于該變量所占用的字節(jié)數(shù),那么偏移量必須滿足默認的對齊方式,第二、如果n小于該變量的類型所占用的字節(jié)數(shù),那么偏移量為n的倍數(shù),不用滿足默認的對齊方式。結(jié)構(gòu)的總大小也有個約束條件,分下面兩種情況:如果 n 大于所有成員變量類型所占用的字節(jié) 數(shù),那么結(jié)構(gòu)的總大小必須為占用空間最大的變量占用的空間數(shù)的倍數(shù); 否則必須為 n 的倍數(shù)。 下面舉例說明其用法。#pragma pack(push) / 保存對齊狀態(tài)#pragma pack(4)/ 設(shè)定為 4 字節(jié)對齊struct testchar m1;double m4;int m3;#pragma pack(pop)/ 恢復(fù)對齊

19、狀態(tài)為測試該功能,可以使用 sizeof ()測試結(jié)構(gòu)體的長度!最近在準備升本考試,在復(fù)習C語言時,發(fā)現(xiàn)幾個以前忽略的問題, 現(xiàn) 在在回過頭來看C語言去研究這些東西感覺挺有意思的, 雖然國二考過 了,但是在準備國二的過程中并沒有像現(xiàn)在這樣發(fā)現(xiàn)這么多小的知識, 也許以前有很多東西還沒吃透吧, 但現(xiàn)在再去理解很多東西都覺得其實 挺簡單的,現(xiàn)在就跟大家分享一下:1. 進制轉(zhuǎn)換'xe0' 表示的是十六進制, 將他用十進制輸出時, 竟然出現(xiàn)了意想不到的結(jié)果,如果沒在 VC里運行單靠用筆來算的話,那么得到的結(jié)果是 224,因為14*16=224,但是在VC里運行的結(jié)果卻是-32,這是為什么

20、 呢,原來在計算機內(nèi)部 224 以二進制形式存儲的是 11100000,最高位是 1 ,那么計算機會認為是一個負數(shù),而不是我們算得認為的 224,既 然是一個負數(shù),那么計算機輸出時就要以原碼的形式輸出, 11100000的原碼是 10100000,他的十進制是 32,別忘了他的最高位表示的是符號位,所以輸出的就是 -32 了。這個結(jié)果如果僅靠筆算的話還真不好算, 因為計算機畢竟不是人,他的算法規(guī)則是一定的,不管數(shù)怎么變他都按 他的預(yù)設(shè)好的算法規(guī)則來。2.自增自減+、一一問題一直是個問題,它牽扯到到底是先用還是先增,說白了,如果+、一一在后面那么就先用,在后面就先增再用,但是有這種情況 就是a=

21、i+i+i+這種情況,那么就不像前面說的那么簡單了,首先 所有的+號都先不看,只算三個I值相加的結(jié)果,最后再將I值自增三 次得到I值。如果是a=+j+j+j呢,那么就要考慮到+號的一個性 質(zhì)就是做結(jié)合性,首先將前兩個j自增兩次相加然后再和后面的自增三 次后的j相加,才能得到結(jié)果。這是這幾天看了題,做了題,改了題之后得到的以前不太明白的一 點小心得!怎樣學習 C語言(2011-04-29 11:22)標簽:C語言一,怎樣學習C語言很多人對學習C語言感到無從下手,經(jīng)常問我同一個問題:究竟怎 樣學習C語言?我是一個教師,已經(jīng)開發(fā)了很多年的 程序,和很多剛剛 起步的人一樣,學習的第一個計算機語言就是

22、C語言。經(jīng)過這些年的開 發(fā),我深深的體會到C語言對于一個程序設(shè)計人員多么的重要,如果不懂C語言,你想寫底層程序這幾乎聽起來很可笑,不懂C語言,你想寫出優(yōu)秀高效的程庌輌這簡直就是天方夜譚。為什么C語言如此重要呢?第一:C語言語法結(jié)構(gòu)很簡潔精妙,寫出的程序也很高效,很便于描 述算法,大多數(shù)的程序員愿意使用 C語言去描述算法本身,所以,如果 你想在程序設(shè)計方面有所建樹,就必須去學它。第二:C語言能夠讓你深入系統(tǒng)底層,你知道的操作系統(tǒng),哪一個不 是C語言寫的?所有的 windows,Unix,Linux,Mac,os/2,沒有一個里外的, 如果你不懂C語言,怎么可能深入到這些操作系統(tǒng)當中去呢?更不要說

23、 你去寫它們的內(nèi)核程序了。第三:很多新型的語言都是衍生自 C語言,C+,Java,C#,J#,perl哪個 不是呢?掌握了 C語言,可以說你就掌握了很多門語言, 經(jīng)過簡單的學 習,你就可以用這些新型的語言去開發(fā)了, 這個再一次驗證了 C語言是 程序設(shè)計的重要基礎(chǔ)。還有啊,多說一點:即使現(xiàn)在招聘程序員,考試都是考C語言,你想加入it行業(yè),那么就一定要掌握好 C語言。那么究竟怎樣學習C語言呢?1:工欲善其事,必先利其器這里介紹幾個學習C語言必備的東東:一個開發(fā)環(huán)境,例如turbo C 2.0,這個曾經(jīng)占據(jù)了 DOS時代開發(fā)程序 的大半個江山。但是現(xiàn)在 windows時代,用turbo C有感覺不方

24、面,編 輯程序起來很吃力,并且拖放,更沒有 函數(shù)變量自動感應(yīng)功能,查詢參 考資料也不方便。建議使用 Visual C+這個東西雖然比較大塊頭,但是 旦安裝好了,用起來很方便。一本學習教程,現(xiàn)在C語言教材多如牛毛,但推薦大家使用 C語言 程序設(shè)計譚浩強主編 第二版 清華大學出版社,此書編寫的很適合初 學者,并且內(nèi)容也很精到。除此以外,現(xiàn)在有很多輔助學習的 軟件,畢竟現(xiàn)在是 Window時代 了,學習軟件多如牛毛,不象我們當初學習,只有讀書做題這么老套。 我向大家推薦一個 集成學習環(huán)境(C語言)”里邊的知識點總結(jié)和例程講 解都非常好,還有題庫測試環(huán)境,據(jù)說有好幾千題,甚至還有一個 windows下

25、的trubo C,初學者甚至不用裝其它的編譯器, 就可以練習編 程了,非常適合初學者。還有一個 “C語言學習系統(tǒng)”軟件,不過感覺只是 一個題庫系統(tǒng),如果你覺得題做的不夠,不妨也可以試試。2:葵花寶典學習計算機語言最好的方法是什么?答曰:讀程序。沒錯,讀程序是學習 C語言入門最快,也是最好的方法。如同我, 現(xiàn)在學習新的J#,C#等其他語言,不再是抱著書本逐行啃,而是學習它 們的例程。當然,對于沒有學過任何計算機語言的初學者,最好還是先 閱讀教程,學習完每一章,都要認真體會這一章的所有概念,然后不放過這一章中提到的所有例程,然后仔細研讀程序,直到每一行都理解了, 然后找?guī)讉€編程題目,最好是和例程類

26、似的或一樣的,自己試圖寫出這段已經(jīng)讀懂的程序,不要以為例程你已經(jīng)讀懂了, 你就可以寫出和它一 樣的程序,絕對不一定,不相信你就試一試吧,如果寫不出來,也不要 著急,回過頭來再繼續(xù)研究例程,想想自己為什么寫不出來,然后再去 寫這段程序,反反復(fù)復(fù),直到你手到擒來為止,祝賀你,你快入門了。3:登峰造極寫程序的最高境界其實就是掌握各種解決問題的手段(數(shù)據(jù)結(jié)構(gòu))和解決問題的方法(算法)。是不是寫出底層程序就是程序設(shè)計咼手呢?非也,寫底層程序,無 非是掌握了硬件的結(jié)構(gòu),況且硬件和硬件還不一樣,要給一個芯片寫驅(qū) 動程序,無非就是掌握這塊芯片的各種寄存器及其組合,然后寫值讀值,僅此而已。這不過是熟悉一些io函

27、數(shù)罷了。那么怎樣才算精通程序設(shè)計 呢?怎樣才能精通程序設(shè)計呢?舉個 例子:你面前有10個人,找出一 個叫 張三”的人,你該怎么辦?第一種方法:直接對這 10個人問:誰 叫張三”第2種方法:你挨個去問 你是不是張三? ”直到問到的這個 人就是張三。第三種方法:你去挨個問一個人你認不認識張三,指給我看”不要小看這個問題,你說當然會選第一種方法,沒錯恭喜你答 對了,因為這個方法最快,效率最高,但是在程序設(shè)計中找到解決問題 的最優(yōu)方法和你用的手段卻是考驗一個程序員程序設(shè)計水平的重要標 志,而且是不容易達到的。剛才這個問題類似于數(shù)據(jù)結(jié)構(gòu)和算法中的: Map數(shù)據(jù)結(jié)構(gòu),窮舉查找和折半查找。所以掌握好數(shù)據(jù)結(jié)構(gòu)

28、和一些常用 算法,是登峰造極的必然之路。最后給大家推薦嚴尉敏的數(shù)據(jù)結(jié)構(gòu) 清華大學出版社,希望每一個想成為程序設(shè)計高手的人研讀此書。 二,語言學習方法談?wù)勁嫉膶W習方法,拋磚引玉!學習不論講不講方法,最終都能學會。但是別人1個月學會了,而你卻100年才學會,這不就晚了么?:)所以說,學習還是要講究方法 的。學習方法正確,事半功倍;學習方法不正確,事倍而功半。什么才是學習C語言的捷徑?我的答案是看書。 書中所寫,是前人數(shù)十年經(jīng)驗所寫,看十本書,就相當于汲取了前人數(shù)十年的功力,那么你的 內(nèi)功也會迅速上升1甲子。:書當然要看好書,只有好書才營養(yǎng)豐富。 假如你花了 1天時間看了一本破書,而該書介紹的知識雖

29、然對于你來說 是全新的知識,但是由于書中組織不當、或者深度不夠,使你獲取的營 養(yǎng)很少,還不如自己研究一天來的快,這種書就不值當看了。學習C語言要看那些好書?我認為首先要把基礎(chǔ)書給看扎實了,比如 C語言之 四書五經(jīng)中介紹的4本。(雖然這些書很多已經(jīng)絕版了,但我相信電 子版也是很有益處。況且,如果你真的想看,我相信你一定有辦法搞的 到。)這些書你會在很短的時間內(nèi)看完(比如一兩個月),這取決于你的 基礎(chǔ)和悟性。之后要看那些書呢?我不妨再列幾本。Bjarne Stroustrup的C+程序設(shè)計語言(The C+ Programming Language 一定要看,這 本書里面對于C的一些基礎(chǔ)概念的定義

30、,比我見過的其他任何 C語言書 都要全,都要仔細;Bjarne Stroustrup的C+語言的設(shè)計與演化(The Design and Evolution of C+ 和 David R.Hanson 的C語言接口與實現(xiàn) 倉U 建可重用軟件的技術(shù) (C In terfaces and Implaeme ntati ons Tech niq ues for Creating Reusable Software - 一定要看,這兩本書講述了如何用 C來實現(xiàn) 異常處理、實現(xiàn)類型的封裝和擴展等一些大的項目中經(jīng)常用到的高級技 術(shù)。其他的書,操作系統(tǒng)的要看,編譯原理的要看,算法的要看,模式 的也要看。讀

31、書破萬卷,coding如有神??偠灾?,就如傳中云:生而知之者,上也;學而知之者,次也;困而學之又其次也。”我們不能總是因困而學之,而要做到兵馬未動,糧草先行??磿菍W習的導(dǎo)向,書中能 介紹清楚概念,但書卻不能把應(yīng)用的細節(jié)一一介紹給你,因為應(yīng)用總是招數(shù)繁復(fù),變化多端。因此我們要想熟悉招數(shù),懂得書中所講怎么使用,還要多讀源碼。Lin us給別人解答問題的時候,常說 Read the *ing source code ;候捷也在其文中提 到 源碼之前,了無秘密?!边@就是大師的箴言呀。源碼就像是動畫、就 像是幻燈片,把書中的招式一一一演練給你看??梢哉f高手的經(jīng)驗大都是源自代碼。源碼和書一樣,也是要看

32、好的,不要看差的。在此,我推薦 看 Linux kernel source code 和 Linux tcp/ip source code。這兩套代碼都是 開源的,垂手可得。此外,還可以配合著Andrew S.Tanenbaum的操作系統(tǒng)的設(shè)計與實現(xiàn)(Operating Systems Design and Implementation)、 毛德操 胡希明的Linux內(nèi)核 源代碼情景分析、Jonathan Corbet,Alessa ndro Rub in i,Greg Kroah-Hartman 合著的Li nux 設(shè)備驅(qū)動程 序(Linux Device Driver,3e)、W.Rich

33、ard StevensTCP/IF詳解(3 部) (TCP/IP Illustracted ) W.Richard StevenUNIX環(huán)境高級編程(Advaneed Programming in the UNIX Environment,新版增加了 Linux kernel 的內(nèi)容) 等書來看,方便的很當然程序不是看出來的,是寫出來的。我高中的時 候每天堅持寫6個小時程序,數(shù)據(jù)結(jié)構(gòu)和排列組合、圖論方面的習 題反復(fù)做了 N遍。到現(xiàn)在雖然已經(jīng)時隔五六年,很多內(nèi)容早已淡忘掉, 但卻培養(yǎng)了我很強的編碼能力和調(diào)試能力,直到現(xiàn)在還對我的工作有很 大的幫助。學習忌貪多、忌浮躁、忌急功近利、忌目中無人。把學

34、習計劃放的 長一些,培養(yǎng)一個好的學習方法,一步一步慢慢走,終能成為高手 如何學好 C語言(2011-04-30 23:09)標簽:C語言分類:C語言我相信,這可能是很多朋友的問題,我以前也有這樣的感覺,編程編到一定的時 候,發(fā)現(xiàn)能力到了瓶頸,既不深,也不扎實,半吊子。比如:你長期地使用Java和.NET,這些有虛擬機的語言對于開發(fā)便利是便利, 但是對于程序員來說可能并不太好,原因有兩個:1. 虛擬機屏蔽了操作系統(tǒng)的系統(tǒng)調(diào)用,以及很多底層機制。2. 大量的封裝好的類庫也屏蔽了很多實現(xiàn)細節(jié)。一段時間后,你會發(fā)現(xiàn)你知其然,不知所以然。我以前在CSDNh寫過一篇Java NIO類庫Selector機制

35、解析(上,下,續(xù)),在那篇文章中我說提到過(有 譏諷的語氣)Java的程序員不懂底層實現(xiàn),所以很難把技術(shù)學得更扎實。此時, 一部分程序員會不自然地想學學底層的技術(shù),很自然的,C語言就被提了上來。F面是我給這位朋友的一些建議:*鼓勵并為你叫好。我鼓勵你想要去學 c語言的想法和精神,很多人都覺得c語言好學,其實并不然。(你可以看看C語言的迷題)現(xiàn)在的這個社會更多地去關(guān)注那 些時髦的技術(shù),而忽略了這個流行了40+年的C語言。一門技術(shù)如果能夠流行 40多年,這才是你需要去關(guān)注和學習的技術(shù),而不是那些剛出來的技術(shù)( 過度炒作的技術(shù),Windows編程史)。這才是踏踏實實的精神。*不要找借口。這一條路走下

36、來并不容易,不要給自己找借口。我最不喜歡聽到的就是 很忙,沒有時間”這樣的借口。我以前在銀行做項目,早9點到晚10點,周一到周六,我一樣可以每天抽1個小時來看書和專研,一年下來也能精讀5、6本書。我現(xiàn)在的工作項目和招聘任務(wù)很緊張, 剛生的小孩只有自己和老婆兩人帶,還需要準備講課,但是我還是能夠找到時間看文章寫文章維護酷殼。所以,我可以告訴你,時間就像乳溝,只要你肯擠,就一定會有”。*學好C語言和系統(tǒng)編程。我認為,學好編程有四個方面:語言、算法和數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)調(diào)用和設(shè)計。o 語言。我可以告訴你 C語言有兩大主題你要好好學,一個是內(nèi)存管理,一個 是指針!這個世界上 90%以上的C/C+出的嚴重性錯

37、誤全是和這兩個有關(guān)。 不要看譚浩強的那本書,那本是本爛書。推薦這本書給你C程序設(shè)計語言(第2版新版)o 算法和數(shù)據(jù)結(jié)構(gòu)。我認為,用C語言實現(xiàn)算法和數(shù)據(jù)結(jié)構(gòu)莫過于最爽的事情。推薦你看這本書一一算法:C語言實現(xiàn)(第14部分)基礎(chǔ)知識、數(shù)據(jù)結(jié)構(gòu)、排 序及搜索(原書第3版),還有那本經(jīng)典的 算法導(dǎo)論o 系統(tǒng)編程。Windows下推薦兩本書Windows程序設(shè)計 和Windows核心編程,Unix/Linux下推薦兩本書Unix高級環(huán)境編程和Unix網(wǎng)絡(luò)編程卷1,套接字Unix網(wǎng)絡(luò)編程卷2,進程間通信尤其是Unix 網(wǎng)絡(luò)編程這本書,一通百通,無論 Windows還是Unix/Linux,都是一樣的。o

38、系統(tǒng)設(shè)計。關(guān)于設(shè)計方面,我全力推薦 Unix編程藝術(shù),看完以后,你就 明白什么是真正的編程文化了。然后,當你看到Windows的Fans的某些言論時,你就知道什么叫一笑了之了。如果你能在2-3年內(nèi)精讀完這些書,并全部融會貫通,那么你就明白什么是一覽 眾山小的感覺了!我足足花了 5年時間才算是真正全部讀完這些書的。最后,祝你好運!努力!-更新:2011/03/29 20:00 -我想,這篇文章主要想告訴大家這么幾件事:編程編到一定時候,你就需要了解底層系統(tǒng)的機制,否則,知其然不知所以然。我沒有否定非C的程序員的邏輯,真正的邏輯是 一一如果你想要了解底層機制,請 學習C語言和操作系統(tǒng)。«

39、 40多年的Unix/C影響深遠。包括影響了 Windows。如果你想一通百通, 一定要了解 Unix。那是計算機文化真正的根。*不要膚淺地去思考問題。比如,不要以為一個DBA就不會考慮數(shù)據(jù)庫引擎的內(nèi)存頁面的問題。也不要以為 Web程序員就不需要了解后臺的服務(wù)器和腳本的運行性能以 及TCP/IP的問題。高手往往都是有很強的系統(tǒng)的基礎(chǔ)知識的,表面的東西永遠是膚淺的。請學好 C語言! (2011-04-25 22:15)標簽:C語言分類:C語言兩位退休的美國大學教授上書反對將Java作為編程教學語言,對此我表示高度認同。對于Java我并不反感,而且相信它在工業(yè)應(yīng)用中的地位不可取代,但是,我一直反對將Java作為主要的編程教學語言,因為教學語言承擔著與生產(chǎn)語言不同的任務(wù),它必須能夠幫助學生奠定堅實的技術(shù)基礎(chǔ),塑造核心技術(shù)能力。在這方面,Java不能夠勝任。1990年代中期以前,美國的計算機編程入門教育以Pascal為主。我的一位美國 程序員朋友至今還懷念他與 Pascal為伴的高中年代。到了1990年代中后期,由于 ANSI C語言 糾正”了早期C語言的一些不適合編程教學的問題,因此成為很多美國高中和大學編程入門課的教學語言。1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論