亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C++程序設計從零開始之何謂編程

2019-11-17 05:20:33
字體:
來源:轉載
供稿:網友
  何謂程序

  程序,即過程的順序,準確地說應該是順序排列的多個過程,其是方法的描述。比如吃菜,先用筷子夾起菜,再用筷子將菜送入嘴中,最后咀嚼并吞下。其中的夾、送、咀嚼和吞下就被稱作命令,而菜則是資源,其狀態(如外形、位置等)隨著命令的執行而不斷發生變化。上面就是吃菜這個方法的描述,也就是吃菜的程序。

  任何方法都是為了改變某些資源的狀態而存在,因此任何方法的描述,也就是程序,也都一定有命令這個東西以及其所作用的資源。命令是由程序的執行者來實現的,比如上面的吃菜,其中的夾、送等都是由吃菜的人來實現的,而資源則一定是執行者可以改變的東西,而命令只是告訴執行者如何改變而已。

  電腦程序和上面一樣,是方法的描述,而這些方法就是人期望電腦能做的事(注重不是電腦要做的事,這經常一直混淆著許多人),當人需要做這些事時,人再給出某些資源以期電腦能對其做正確的改變。如計算圓周率的程序,其只是方法的描述,本身是不能發生任何效用的,直到它被執行,人為給定它一塊內存(關于內存,請參考《C++從零開始(三)》),告訴它計算結果的精度及計算結果的存放位置后,其才改變人為給定的這塊內存的狀態以表現出計算結果。

  因此,對于電腦程序,命令就是CPU的指令,而執行者也就由于是CPU的指令而必須是CPU了,而最后的資源則就是CPU可以改變其狀態的內存(當然不止,如端口等,不過一般應用程序都大量使用內存罷了)。所以,電腦程序就是電腦如何改變給定資源(一般是內存,也可以是其他硬件資源)的描述,注重是描述,本身沒有任何意義,除非被執行。

  何謂編程

  編程就是編寫程序,即制訂方法。為什么要有方法?方法是為了說明。而之所以要有說明就有很多原因了,但電腦編程的根本原因是因為語言不同,且不僅不同,連概念都不相通。

  人類的語言五花八門,但都可以通過翻譯得到正解,因為人類生存在同一個四維物理空間中,具有相同或類似的感知。而電腦程序執行時的CPU所能感受到的空間和物理空間嚴重不同,所以是不可能將電腦程序翻譯成人類語言的描述的。這很重要,其導致了大部分程序員編寫出的拙劣代碼,因為人想的和電腦想的沒有共性,所以他們在編寫程序時就隨機地無目的地編寫,進而導致了拙劣卻可以執行的代碼。
電腦的語言就是CPU的指令,因為CPU就這一個感知途徑(準確地說還有內存定位、中斷響應等感知途徑),不像人類還能有肢體語言,所以電腦編程就是將人類語言書寫的方法翻譯成相應的電腦語言,是一個翻譯過程。這完全不同于一般的翻譯,由于前面的紅字,所以是不可能翻譯的。

  既然不可能翻譯,那電腦編程到底是干甚?考慮一個木匠,我是客人。我對木匠說我要一把搖椅,躺著很舒適的那種。然后木匠開始刨木頭,按照一個非凡的曲線制作搖椅下面的曲木以保證我搖的時候重心始終不變以感覺很舒適。這里我編了個簡單的程序,只有一條指令——做一把搖著很舒適的搖椅。而木匠則將我的程序翻譯成了刨木頭、設計特定的曲木等一系列我看不懂的程序。之所以會這樣,在這里就是因為我生活的空間和木工(是木工工藝,不是木匠)沒有共性。這里木匠就相當于電腦程序員兼CPU(因為最后由木匠來制作搖椅),而木匠的手藝就是CPU的指令定義,而木匠就將我的程序翻譯成了木工的一些規程,由木匠通過其手藝來實現這些規程,也就是執行程序。

  上面由于我生活的空間和木工(指木工工藝,不是工人)沒有共性,所以是不可能翻譯的,但上面翻譯成功了,實際是沒有翻譯的。在木工眼中,那個搖椅只是一些直木和曲木的拼接而已,因為木工空間中根本沒有搖椅的概念,只是我要把那堆木頭當作搖椅,進而使用。假如我把那堆木頭當作兇器,則它就是兇器,不是什么搖椅了。

  “廢話加荒謬加放屁!”,也許你會這么大叫,但電腦編程就是這么一回事。CPU只能感知指令和改變內存的狀態(不考慮其他的硬件資源及響應),假如我們編寫了一個計算圓周率的程序,給出了一塊內存,并執行,完成后就看見電腦的屏幕顯示正確的結果。但一定注重,這里電腦實際只是將一些內存的數值復制、加減、乘除而已,電腦并不知道那是圓周率,而假如執行程序的人不把它說成是圓周率那么那個結果也就不是圓周率了,可能是一個隨機數或其他什么的,只是運氣極好地和圓周率驚人地相似。

  上面的東西我將其稱為語義,即語言的意義,其不僅僅可應用在電腦編程方面,實際上許多技術,如機械、電子、數學等都有自己的語言,而那些設計師則負責將客戶的簡單程序翻譯成相應語言描述的程序。作為一個程序員是極其有必要了解到語義的重要性的(我在我的另一篇文章《語義的需要》中對代碼級的語義做過較具體的闡述,有愛好可以參考之),在后續的文章中我還將提到語義以及其對編程的影響,假如你還沒有理解編程是什么意思,隨著后續文章的閱讀應該能夠越來越明了。   電腦編程的基礎知識——編譯器和連接器

  我從沒見過(不過應該有)任何一本C++教材有講過何謂編譯器(Compiler)及連接器(Linker)(倒是在很老的C教材中見過),現在都通過一個類似VC這樣的編程環境隱藏了大量東西,將這些封裝起來。在此,對它們的理解是非常重要的,本系列后面將大量運用到這兩個詞匯,其決定了能否理解如聲明、定義、外部變量、頭文件等非常重要的要害。

  前面已經說明了電腦編程就是一個“翻譯”過程,要把用戶的程序翻譯成CPU指令,其實也就是機器代碼。所謂的機器代碼就是用CPU指令書寫的程序,被稱作低級語言。而程序員的工作就是編寫出機器代碼。由于機器代碼完全是一些數字組成(CPU感知的一切都是數字,即使是指令,也只是1代表加法、2代表減法這一類的數字和工作的映射),人要記住1是代表加法、2是代表減法將比較困難,并且還要記住第3塊內存中放的是圓周率,而第4塊內存中放的是有效位數。所以發明了匯編語言,用一些符號表示加法而不再用1了,如用ADD表示加法等。
由于使用了匯編語言,人更輕易記住了,但是電腦無法理解(其只知道1是加法,不知道ADD是加法,因為電腦只能看見數字),所以必須有個東西將匯編代碼翻譯成機器代碼,也就是所謂的編譯器。即編譯器是將一種語言翻譯成另一種語言的程序。

  即使使用了匯編語言,但由于其幾乎只是將CPU指令中的數字映射成符號以幫助記憶而已,還是使用的電腦的思考方式進行思考的,不夠接近人類的思考習慣,故而出現了紛繁復雜的各種電腦編程語言,如:PASCAL、BASIC、C等,其被稱作高級語言,因為比較接近人的思考模式(尤其C++的類的概念的推出),而匯編語言則被稱作低級語言(C曾被稱作高級的低級語言),因為它們不是很符合人類的思考模式,人類書寫起來比較困難。由于CPU同樣不熟悉這些PASCAL、BASIC等語言定義的符號,所以也同樣必須有一個編譯器把這些語言編寫的代碼轉成機器代碼。對于這里將要講到的C++語言,則是C++語言編譯器(以后的編譯器均指C++語言編譯器)。

  因此,這里所謂的編譯器就是將我們書寫的C++源代碼轉換成機器代碼。由于編譯器執行一個轉換過程,所以其可以對我們編寫的代碼進行一些優化,也就是說其相當于是一個CPU指令程序員,將我們提供的程序翻譯成機器代碼,不過它的工作要簡單一些了,因為從人類的思考方式轉成電腦的思考方式這一過程已經由程序員完成了,而編譯器只是進行翻譯罷了(最多進行一些優化)。

  還有一種編譯器被稱作翻譯器(Translator),其和編譯器的區別就是其是動態的而編譯器是靜態的。如前面的BASIC的編譯器在早期版本就被稱為翻譯器,因為其是在運行時期即時進行翻譯工作的,而不像編譯器一次性將所有代碼翻成機器代碼。對于這里的“動態”、“靜態”和“運行時期”等名詞,不用刻意去理解它,隨著后續文章的閱讀就會了解了。

  編譯器把編譯后(即翻譯好的)的代碼以一定格式(對于VC,就是COFF通用對象文件格式,擴展名為.obj)存放在文件中,然后再由連接器將編譯好的機器代碼按一定格式(在Windows操作系統下就是Portable Executable File Format——PE文件格式)存儲在文件中,以便以后操作系統執行程序時能按照那個格式找到應該執行的第一條指令或其他東西,如資源等。至于為什么中間還要加一個連接器以及其它細節,在后續文章中將會進一步說明。

  也許你還不能了解到上面兩個概念的重要性,但在后續的文章中,你將會發現它們是如此的重要以至于完全有必要在這嘮叨一番。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久国产一区二区三区| 亚洲色图17p| 91精品国产综合久久香蕉的用户体验| 久久久中精品2020中文| 欧美成人免费观看| 亚洲第一区第一页| 日本午夜精品理论片a级appf发布| 亚洲欧美国产日韩中文字幕| 国产成人精品视| 国产精品入口日韩视频大尺度| 成人欧美一区二区三区黑人| 中文字幕亚洲综合| 中文字幕在线观看亚洲| 欧美日韩成人精品| 中文字幕一区日韩电影| 久久国产精品亚洲| 久久久久久久久久国产精品| 国产精品福利观看| 亚洲一区二区日本| 91av国产在线| 91精品一区二区| 亚洲精品成人免费| 欧美日本国产在线| 成人网在线观看| 亚洲xxxx3d| 日韩欧美有码在线| 亚洲91精品在线观看| 亚洲欧洲在线视频| 欧美在线视频一二三| 精品免费在线视频| 日本精品视频在线播放| 91沈先生在线观看| 神马久久久久久| 久热在线中文字幕色999舞| 欧美视频在线免费| 欧美xxxx综合视频| 欧美精品www在线观看| 欧美激情中文字幕乱码免费| 亚洲一区二区自拍| 久久精品国产成人精品| 欧美性色19p| 青青草原一区二区| 中文字幕一区日韩电影| 中文字幕亚洲精品| 欧美俄罗斯性视频| 久久久免费观看视频| 亚洲女人被黑人巨大进入| 亚洲视频日韩精品| 成人免费黄色网| 国产一区二区三区视频在线观看| 中文综合在线观看| 成人午夜在线影院| 欧美激情视频在线免费观看 欧美视频免费一| 久久99久国产精品黄毛片入口| 97av在线影院| 91在线中文字幕| 亚洲日本成人网| 日韩电视剧在线观看免费网站| 欧美中在线观看| 中文字幕自拍vr一区二区三区| 亚洲第一精品久久忘忧草社区| 国产精品久久久久久久9999| 国产精品入口免费视| 88xx成人精品| 少妇av一区二区三区| 最近中文字幕2019免费| 日韩中文在线中文网在线观看| 欧美成年人视频网站欧美| 国产成人久久久精品一区| 亚洲国产中文字幕在线观看| 国产美女搞久久| 色综久久综合桃花网| 国产91热爆ts人妖在线| 欧美激情国产精品| 亚洲剧情一区二区| 精品一区电影国产| 欧美性猛交xxxx乱大交极品| 精品久久在线播放| 亚洲精品99999| 国产精品久久中文| 久久久女人电视剧免费播放下载| 国产美女久久精品香蕉69| 日韩毛片在线观看| 欧美另类69精品久久久久9999| 日韩av手机在线观看| xvideos国产精品| 国产v综合ⅴ日韩v欧美大片| 国产精品午夜视频| 在线视频欧美性高潮| 日韩激情视频在线| 国产日产久久高清欧美一区| 日韩美女视频在线观看| 91亚洲国产成人精品性色| 久久精品国产久精国产思思| 欧洲精品在线视频| 亚洲国产成人av在线| 日韩av免费在线播放| 综合国产在线观看| 大量国产精品视频| 国产欧美日韩免费| 一区二区三区视频观看| 欧美人交a欧美精品| 欧美另类交人妖| 57pao精品| 中文字幕国产亚洲| 最近2019年手机中文字幕| 97精品视频在线播放| 在线观看日韩欧美| 夜夜嗨av色一区二区不卡| 热久久这里只有精品| 亚洲乱码av中文一区二区| 国产美女扒开尿口久久久| 欧美日韩国内自拍| 久久久久久国产精品| 国产精品美乳一区二区免费| 亚洲国产精品99久久| 日韩欧美一区二区在线| 成人欧美一区二区三区黑人孕妇| 国产一区二区三区欧美| 日韩欧美一区二区在线| 尤物tv国产一区| 国产精品欧美日韩| 国产日韩欧美在线播放| 欧美日本高清一区| 97久久久免费福利网址| 欧美亚洲国产另类| 欧美激情一级欧美精品| 超碰日本道色综合久久综合| 国产国语刺激对白av不卡| 国产亚洲激情视频在线| 热久久免费视频精品| 久久五月天综合| 日韩在线小视频| 九九热精品视频国产| 久久九九精品99国产精品| 国产精品福利在线观看网址| 欧美电影在线免费观看网站| 日韩a**中文字幕| 国产日韩欧美91| 久久国产精品99国产精| 欧美成人第一页| 成人福利网站在线观看11| 在线电影av不卡网址| 成人国内精品久久久久一区| 国产69久久精品成人看| 91亚洲国产成人精品性色| 国产z一区二区三区| 日韩精品在线观看一区二区| 国产精品一区二区三区毛片淫片| 欧美另类99xxxxx| 国产精品一二三视频| 91精品在线国产| 好吊成人免视频| 亚洲最新中文字幕| 日韩中文字幕久久| 欧美日本在线视频中文字字幕| 欧美一级免费视频| 亚洲综合成人婷婷小说| 97超视频免费观看| 日韩中文字幕网址| 欧美成人一区二区三区电影| 热草久综合在线| 成人精品网站在线观看| 久久精视频免费在线久久完整在线看|