程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 我們如何從VC++開始“編程”?

我們如何從VC++開始“編程”?

編輯:關於C語言

這是一位同學寄到我郵箱裡面的一封信。應該說,這類C/C++入門學習的問題我回答過,只是並沒有很具體到某個平台,某個語言,因此,我的回答可能給大家一種雲裡霧裡的感覺,指導性不強,因此,大家還是不斷問。我也只有不斷回答。   其實呢,這裡面我自己也有一些苦衷。寫程序寫到我這麼久,看很多問題都抽象了,大家覺得很多風馬牛不相及的問題,在我看來,都是“一碼事”。 Windows和Linux操作系統,甚至其他的操作系統,我看起來,是“一碼事”。 VC和gcc,“一碼事”。 C和C++,“一碼事”。 匯編和高級語言,“一碼事”。 C++和Java,“一碼事”。 網絡傳輸和共享內存,“一碼事”。 進程和線程,“一碼事”。 進程和服務,“一碼事”。 。。。 甚至,我說個嚇人的,站在“堆”的角度,“棧”和“隊列”,也是“一碼事”。 大家能理解不?   因此,每次大家一問到我很具體的問題,我就頭大,n多的朋友,直接一段代碼甩到我QQ或者email裡面,問肖老師,這段代碼為啥掛了?為啥有洩漏?我就快昏死過去了。呵呵。   我想這很好理解,大家剛剛開始接觸計算機軟件編程,從0注意,不是O“偶”啊,呵呵)開始學習,看到很多新奇的東東,也學到很多新想法,這些東東呢,目前還沒有串起來,都是零散的知識點,因此,看問題“割裂”思維很嚴重,學東西也不透徹。問出問題來,目的性也很強,搞得我很不好回答。   就好比下面這位同學的問題。   不過呢,我想這是正常的,我也是從這條路走過來的,這不算什麼。其實軟件編程也就是一份工作啦,只要潛心鑽研進去,好好學習,慢慢的,工作做多了,看到的東東多了,見識廣了,也就自然而然能站在一個較高的角度,“俯視”這個專業,那,自然很多東東,看起來就不難了。   我今天把這位朋友的信做個公開回答,我想,回答的問題其實並不重要,關鍵是,我希望大家能理解,如果能多學一點東東,以一種統攬的目光來看待問題,則很多問題,尤其是很多方向性問題,其實很容易解決的。   我想,這是一種思想,我寫文字,喜歡加點思想的東東進去,好比我的書《0bug-C/C++商用工程之道》一樣,大家都說這是一本程序書,其實,我這個作者說不是的。我真正想講的內容,其實在第一章,如何讓程序員掌握商用化開發和工程化開發的思想,能理解這個,其實,後面的內容我認為都不必細看的,因為自己遇到問題,都能提出解決方案,何苦來照抄我的?   技術是不值錢的,思想值錢。起碼我這麼認為。   好,言歸正傳,我們看看這位同學的來信,嗯,還是那句話哈,一家之言,歡迎拍磚,呵呵,別忘了。   原文如下: 肖老師:     你好,最近也許你很忙吧?不過我還是很榮幸,你看到我的信了。我的名字叫陳XX,在廣西桂林電子科技大學學習,專業是信息與計算科學;我今年是大二的學生了,而且馬上進入大三了。今天是周未,在大學生大本營中找到了你的郵箱地址。其實我很想與你寫信了,只是沒有找到你的郵箱地址啊!今天有幸看到《我們“憑什麼”找工作?》這文章後有個你的郵箱和QQ。     還是開門見山吧,其實我也很想成為一名程序員,不僅這個職業可以賺錢,而且我也越發現我喜歡上了這個職業。因為我們在大一學了C和C++。我覺得很上手。可是我還是很迷惘啊!怎麼說呢?因為我們學了上面的那兩和計算機語言。我就從上學期開始學MFC,還有相關的WinAPI。可是我覺得好難了。學了那麼久了我覺得沒有什麼進展的。很亂。我現在我覺得我選擇了這個,我還是想堅持下去,但是又很猶豫,一來因為我的數學不好,聽說做程序員的話要有比較好的數學功底才行,是不是這樣的一種情況呢?期待你的回答一下!      第二,我學習Windows下編程,MFC,要從哪裡下手,應該怎麼學才能夠有很好的進步呢?      第三,我們是信息與計算科學專業,我們得知這個專業的學生就業不是很好,你覺得在這個專業裡我們如何安排剩下的時間才對呢?我們該向哪方面發展呢?      我是個農村出來的孩子,不怎麼懂得說話,今天能夠遇到你的確是我的榮幸啊!很期待你的回復,在此先謝謝你了。                                                                                                         陳XX                                                                                                   2010年3月13日   我的回答:   要我說,不管學C還是學C++,VC和gcc都可以,甚至,什麼其他C語言編譯器,也可以啊,Intel的C,以前DOS下的turbo C/C++,Watcom C/C++,都可以,我首先擺句話,C和C++是語言,既然是語言,就與操作系統無關,那些printf,scanf,甚至包括什麼對話框,MassageBox,消息循環,都不重要,因為這不是語言特性,初學者,暫時先不必管。   其實學語言,東西不多的。C語言裡面,常用的就那麼一些語句,嗯,幾乎所有的語言,都只有那麼些語句。 你要有判斷語句吧,分支是程序設計很重要的,那if...else結構要學習一下。 循環,計算機裡面主要就是循環,while,for,得學習吧。 要有變量,則必然有賦值語句,與之對應,有了變量就有了常量,那麼,#define的宏定義,const常量宣告,要學一點。 加減乘除基本四則計算要會吧,大家學計算機專業,什麼邏輯運算符要會吧? 程序要分段,每段呢,Basic叫子程序,或者模塊,C裡面叫函數,其他語言各有叫法,其實都是一碼事啦。 既然有了函數,或者子程序,“跳子”動作要理解吧,或者Call函數的動作要理解吧?就是我從主程序跳到一個子模塊執行,執行完畢後會自動返回到調用處,繼續執行主程序,這個好理解吧? 然後呢? 沒啦! 真沒啦,熟練掌握上面的基本語句,你什麼語言其實都可以寫程序的。大家說對不? Basic,匯編,C,等等,各種語言,在編制執行流程這部分,又有多大差別?   然後呢?學一點指針,C語言最拽的就是指針,沒指針,C就變Basic了,呵呵。 學指針,我給個新鮮點的建議,大家不妨試試。很多人站在高級語言的角度,理解指針確實困難,什麼嘛,指來指去的,腦子都亂了。 ok,我建議大家學習一點匯編語言,這方面書也很好找的,站在匯編角度去理解指針,一下就能理解,因為匯編裡面全是指針計算,你調入寄存器的值,是通過一個單元號來表示的,這就是指針。大家只要用匯編實現一個鏈表,嗯,再多實現一個樹,我想,指針怎麼玩,再怎麼都會了。有興趣的朋友,不妨試試。   然後呢?呵呵,C學習完了,起碼我認為是這樣。 講到這裡,大家肯定罵聲一片,姓肖的這個江湖騙子,又在騙人了某位網友送我的,呵呵),每本學習C語言的書,第一課,Hello World,你都不講,printf都不教,你這C語言就學完了?退學費!哦,肖老師沒收我學費,沒得退-_- 嗯,確實,如果大家要我講C語言,我是不講Hello World的,printf,是操作系統的東東哦,不屬於語言規范。因為它涉及輸入輸出流控制,而流這個概念,其實是操作系統提供給各種語言的通用控制台功能。不屬於語言范疇。 另外,不是每個操作系統都提供printf哦,Windows的窗口模式下,你用printf試試看,能不能打出東東來因此,我說句話,凡是和具體平台綁定的東東,其實通用性並沒有保障,學語言,學抽象,先學通用的東東好一點。   ok,我們再來看C++,嗯,C++博大精深,我這輩子是沒有學完的,我想,這個世界上恐怕也很少有程序員,寫程序曾經把C++的每一個特性都用一遍。那怎麼學? 我的回答是,學到夠用為止。   C++,最重要的是面向對象的思想,我想,學會這個,比什麼都重要。我們學C的編程,一件事情,先做什麼,後做什麼,起碼,我們是講得清楚的,也能寫出程序流程,這種分先後次序做事情的方法,是典型的面向過程。 面向對象在現代程序開發中很重要,大型工程,功能模塊太多,每個組織工具,全部然到一起,會亂的,bug也不好控制。因此,用對象,把一堆數據,以及它所有可能的操作方法,集合到一起,到哪都不會丟三落四的,這樣寫的代碼,質量高,效率也不錯,是個好的開發習慣。   其實面向對象很簡單,計算機裡面,做來做去都是計算,對不對?既然是計算,就少不了數據,因此,數據必有其特性啊,那麼,我們寫的函數模塊,可能適合這類數據,不適合那類數據,我們用對象把函數和它適合處理的數據,全部綁到一起,大家調用起來方便嘛。就這麼簡單。   還有個命名空間問題,這是C++的創造發明,同樣一個AddData,向一個集合裡面加數據,給隊列加的算法和給棧加的算法,就肯定不一樣,亂用就要出錯。C呢,命名上不容易區分,現在到了C++,“隊列.AddData()”和“棧.AddData”,大家看看,是不是一目了然?命名空間就是讓程序員好看不發昏的工具嘛。   理解了對象,那自然理解類,類是對象的程序描述,對象則是類程序在運行期,內存中實例化出來的一個具體有生命的程序工作段,一個類可以實例化一個對象,也可以實例化多個,各有其私有變量區,互相不然,同樣一個“人”這個類,我們可以實例化出張三李四王二麻子三個對象,都是合理的,理解不?   模板就不多說了吧,其實就是“類的類”,模板沒有界定類的一些特性,比如數據類型,那麼,哪天我們把int貼合到一個模板上,可以得到一個int類,float也可以得到float類,再進一步實例化為int類對象和float類對象,就這麼簡單。大家不用想復雜了。   C++理解到這裡,我認為就夠了,剩下的,工作中有用到,邊看邊學啦,最核心的理念已經掌握了。   有一個重點,幾乎所有的C++編譯器,其實都是兼容C和C++的,嗯,還有內嵌式匯編。那,寫程序有必要分得那麼開嗎?C++到函數內部,不就是C啦,C呢,我用函數指針+結構體,一樣可以實現對象的。這個世界正式因為有了這種復雜性和多樣性,才多姿多彩的。   所以,建議大家寫程序的時候,哪個語言合用用哪個,別形而上學,別鑽牛角尖,什麼語言都是假的,寫出程序來賣錢是真的,大家說是不是?   ok啦,我們終於可以回到這位同學的問題,咋從VC開始,用MFC寫Windows程序?   很簡單,按上面的流程走一遍,C和C++基本知識都不熟,上來就學windows開發,還要理解MFC,沒有學會走,就想跑,會摔跟斗的。   學完上面的,要去看看Windows程序設計這本書,很經典的,這裡面啊,沒怎麼講MFC,但是,講了使用WinMain方式寫Windows程序的辦法,其實,這更符合傳統的C和C++,都要有個main才能開始運行吧。   不理解WinMain,上來就跑MFC,我敢說,你連你的程序從哪開始運行的都找不到。   WinMain很好理解的,上來先CteateWindowEx,就是創建一個窗口,這個函數巨復雜,不要背,我每次都是從別人代碼裡面拷貝一個過來,自己改吧改吧,窗口就出來了。   最重要的來了哈,Windows程序都是基於一個事件隊列在工作,也叫消息隊列,深刻理解消息隊列循環,要知道,每個窗口一出來,Windows系統就友情贈送了一個消息隊列服務給你,你按的鍵盤,點的鼠標,還有其他一些什麼事件,都自動放到這個隊列中,我們程序的任務,就是建立一個死循環,不斷從隊列中彈出消息來處理就好了,至於有多少種消息,我告訴你,無數種,因為可以自定義,簡單看看Windows常用幾個,剩下的,以後碰到再查啦。   嗯,還是要給大家一個printf嘛,不然,大家想打點字符都打不出來,也太沒面子了,去查查AfxMessageBox這個函數,暫時應該夠用了,再不然,去看看GDI裡面的TextOut,是不是這個哦?好久沒用,記不清了。實在不行,VC下有個通用的,TRACE,這是打印到VC開發環境,就是IDE的Out窗口的,和printf用法一樣,夠了吧?   當我們把這些東東理解了,去看看侯捷先生的《深入淺出MFC》,怎麼從WinMain思想一下跳到MFC的框架思想,看完前三章就回了,後面幾章我都沒怎麼看,也夠用了,呵呵。   有個提示,去找本Win32API手冊,這個一般Windows開發是必備的,系統提供什麼功能函數,基本上都有,這中間要理解Handle的概念,句柄,很費解的,我當初也是很久都沒有理解到,直到有一天,有個大蝦一句話把我點醒了,“你把它當窗口的指針看好了!”,明白了吧,C和C++中,指針代表一切,什麼都可以指針表示,你就把Handle看做指針好了,就是一個窗口,一個資源,在系統中的唯一標示符,一個ID,一個指針。   再提示一點,Win32API的函數,MFC中基本上都有同名的對應函數,很多時候,看熟悉了,猜都猜得出MFC下一個對象,可能有哪些公有方法的。反過來也一樣,MFC熟了,可以逆推Wind32API裡面有啥函數。   and。。。沒啦! 又沒啦,使用VC,利用MFC開發Windows程序,把上面路程走一遍,就差不多了,要是書買的齊全,我覺得,三個月足以了,沒必要花太多時間。   當然,這樣開發商用工程還是不夠的,得大量的學習其他相關知識。 我們開發非模態窗口,要理解線程的,要理解並行開發,那就要理解鎖了,這個呢,是所有多任務操作系統都必須學習的開發知識,要想學習這個,我推薦我的書《0bug-C/C++商用工程之道》,第六章以後全在講這些知識,並行開發的知識。 我們開發圖形應用,要理解GUI,GDI對象,DirectX,這些都有專門的書,用了就學,不用就不學。 網絡估計是大家都少不了的,現在的話是,不懂TCP/IP開發,就不要學著別人出來闖江湖,呵呵,不過呢,學TCP最好的書不是Windows的,有本《Unix網絡編程》,第一卷和第二卷,經典到了極點,建議看看,看了,什麼Windows,Linux,都是一碼事。呵呵。   然後呢? 然後我話講完,洗洗睡了^_^   =======================================================
在線底價購買《0bug-C/C++商用工程之道》
直接點擊下面鏈接或拷貝到浏覽器地址欄)
http://s.click.taobao.com/t_3?&p=mm_13866629_0_0&n=23&l=http%3A%2F%2Fsearch8.taobao.com%2Fbrowse%2F0%2Fn-g%2Corvv64tborsvwmjvgawdkmbqgboq---g%2Cgaqge5lhebbs6qzlfmqmttgtyo42jm6m22xllqa-------------1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20---40--coefp-0-all-0.htm%3Fpid%3Dmm_13866629_0_0
肖舸

本文出自 “肖舸的blog” 博客,請務必保留此出處http://tonyxiaohome.blog.51cto.com/925273/283525

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved