有沒有合適的學習路線來學習封裝在IDE下的原理?
我並不是不想使用IDE。因為目前還是大一新生,所以想更深入的了解一下封裝在IDE下的知識。
舉個例子,高級語言會被編譯器編譯成機器語言。這件事情我在IDE上點擊運行就可以了。但是我想了解在點擊運行之後發生的事情。謝謝回復
你可以學習使用Windows SDK + WinDBG來編程,然後你就會明白,脫離IDE對提高編程水平沒有任何幫助。
多花點時間在代碼編寫上比較好,人生苦短,我用IDE.
如果是以Visual Studio為例的話,那麼我猜你想了解的應該是IDE底下的MSBuild系統。這個系統就是你點擊「Build」(不是Run)之後發生的事情:MSBuild1
MSBuild已經開源:Microsoft/msbuild如何看到點擊「Build」之後的具體行為呢?把下圖最下面兩個MSBuild選項設置為Details。歡迎來到MSBuild的迷宮。相信我,單純的為了用命令行而用命令行跟IDE比起來差距不大。要學被封裝的知識,推薦《CSAPP》
一個"GCC main.c"和點一下運行按鈕有什麼區別呢?編譯鏈接該會的還是不會……csapp,然後編譯原理。我一直不明白為啥老是有人試圖通過放棄ide來學點什麼……類似一種手插鍋里練鐵砂掌的感覺?
我也是大一新生,機器配置不高( SP3 i5 4G ),苦於沒有足夠的空間裝下Visual Studio Community於是便使用Visual Studio Code + MinGW編譯Cpp,Anaconda集成的Python 3.5.2來跑Python,目前用的還是很爽的…
還有如果需要Linux環境就用bash to Windows吧!基本夠用了!( 機器硬碟空間足夠請直接上Visual Studio Community謝謝←_← )不過之前在Bash下編譯的還是讓我初步了解了一下Linux命令行的…所以也算有好處吧?
---------------------------我是分割線---------------------------根據評論區 @吳子文 提醒,請64位機器一定安裝MinGW-w64!不然將無法編譯!具體地說,我們自己用高級語言寫的程序,稱為高級語言源程序,而將其轉化成二進位代碼之後的程序,稱為目標程序——它已經是完全的二進位機器指令了,這個過程稱為編譯。事實上,廣義上的「編譯」,指的是任意的從一種語言到另一種語言的轉化過程(比如TypeScript編譯成JavaScript),而對於C/C++,編譯的路徑一般指的是C/C++源代碼到二進位機器碼——它的格式與你所使用的計算機的體系結構與操作系統直接相關。當然有些情況下,也可以將其編譯成彙編語言。
那麼,是不是有目標程序就能直接運行了呢?我們需要考慮到,如果一個程序比較大的話,那麼它可能要有多個模塊來協作——就算是簡單地向屏幕上輸出一個「Aloha Oe」,你也依然需要調用系統庫里定義好的輸出功能模塊。
所以,我們需要把所有需要的模塊都合併在一起,才能構成一個可以執行的程序——這個就是程序的鏈接過程,鏈接完成之後,才會得到一個可以執行的程序。有一些專門的軟體可以完成這個過程,這些軟體被稱為編譯器(Compiler)和鏈接器(Linker)。大多數情況下,同一個編譯器軟體,可以直接把編譯和鏈接的過程一次完成——但你也可以手動指定讓它們只完成編譯過程。
在編譯和鏈接的過程中,都會對程序中的錯誤進行檢查——只有代碼準確無誤的程序才能編譯成功,如果代碼本身有錯誤的話編譯器就會報錯。但是需要注意的是,編譯通過,並不代表程序本身是完全正確的——你仍然需要通過調試,確認程序可以正確地運行,才能說你的程序是準確無誤的。
如圖所示:
這個hello.obj文件就是編譯得到的二進位文件(稱為目標文件),接下來要經過連接的過程(把多個目標文件連接到一起)才能得到最後的可執行文件。你也可以這樣:對於g++和clang++,把編譯參數改成-c的話,你就可以得到Linux下的*.o文件,跟Windows下的*.obj文件是一樣的。另外,Linux的可執行文件沒有固定的擴展名,這個跟Windows下的*.exe文件是不一樣的。
最後,初學編程階段千萬別碰任何Linux發行版(WSL除外)……1)代碼如何編譯成機器指令,又如何被載入運行,想要細究,需要至少學習計算機組成原理、編譯原理。如感興趣可以去學。如果你只想了解個大概,那麼這類信息其實可以通過別的途徑獲取,比如google某某語言是如何編譯運行的,就會有一堆答案。你只要一個下午就能看個遍,不用去啃好幾本厚書,多棒呀。2)不是非得深入了解發動機原理才能學習開車的。以及,現在這時代,有飛機坐就別划船了,畢竟你還不是高玩。我也不是。。。
誰說一定要用ide1、學習c語言用編輯器編寫代碼,用clang或gcc編譯。2、python 也不一定要ide,用vim emacs等編輯器一樣的。
我覺得任何人都應該手動寫一下Makefile,就像題主說的,去了解一下IDE點擊build之後發生了什麼。
1. 首先最好搞一個Linux/Unix開發環境。之後你可以從選擇一個文本編輯器開始,emacs,或者vim,更現代一點的可以看看github的atom。不要花太多時間浪費在編輯器上,搞一個最簡單的可開發環境就可。我本人用emacs,裝一個autocomplete,加上F5 compile就可以了。去網上搜一下手寫Makefile的教程,從最簡單的看起,了解一下include和link是怎麼一回事;看一下GNU文檔里對於make和gcc/g++常用的flag,相信對於理解編譯會很有幫助。熟悉之後可以進一步手寫generic一些的Makefile,研究一下make加不同的flag對編譯的不同影響。如果對於簡單寫一些application或命令行程序,這些差不多了。
2. 如果你需要,或者感興趣開發一些複雜的project,比如庫或者複雜的application,那麼最好學一下autotools或者cmake(或者類似的用來自動build的工具)。這些工具簡單來說就是用一些模版腳本來實現自動生成Makefile:對於複雜的庫,想實現自動編譯,測試,如果手動寫Makefile,是很複雜的;相反用autools或cmake等工具,可以做到最大化的自動化,不用每次添加或修改文件後都去手動修改各處的Makefile。我個人寫的是autotools,因為組裡一直在用。初學難度會比較大。如果覺得autotools難學可以學cmake。cmake現在越來越popular了。
你才剛大一,時間應該很充足。靜下心來,慢慢學,把基礎打好,這些對你以後會大有幫助。一般來說,新手可以通過學會使用簡單的IDE來了解IDE的原理。
一個不算學習路線的學習路線:首先,非常地贊同你想了解一下"封裝在IDE下的原理"的想法。畢竟知其所以然在很多時候還是很有幫助的。你問的是學習路線,所以先推薦兩本書:1. 《Code: The Hidden Language of Computer Hardware and Software》中文譯名《編碼:隱藏在硬體背後的語言》或簡稱編碼的奧秘。2.《Computer Systems - A Programmer"s Perspective》簡稱CSAPP, 中文譯名《深入理解計算機系統》。
第一本書以通俗易懂的方式介紹了計算機是怎麼工作的。畢竟代碼是運行在計算機上的,所以先了解一下它是怎麼工作的還是有好處的。比如cpu到底是怎麼執行"代碼"的,內存又是怎麼存儲數據和被通過地址進行訪問的。可以先大體翻看,了解基本知識,涉及到各進位編碼或電路邏輯的部分,暫時可以忽略,以後有一定的編程經驗再回來看。
第二本書詳細介紹了你想要了解的原理,也就是代碼是怎麼被編譯,變成可執行文件,然後可執行文件又是怎麼運行起來的,運行的過程中又發生了什麼等。簡單來說,這部分"封裝在IDE下的原理"其實就是把"源代碼"(你輸入的程序和引用的文件等)變成CPU支持的指令序列並將其運行起來的過程。以C語言編程為例,主要包括以下幾個步驟:1. 預處理。對你輸入並保存為文件的"源代碼"進行頭文件插入,宏符號替換等操作,為下一步操作做好準備。2.編譯。把你的源文件編譯為彙編語言文件。3.彙編。把步驟2的結果進一步編譯為機器指令序列。4.鏈接。把步驟三3中的多個文件組合成一個整體的程序。5.運行。如果你當前編寫的是一個可執行程序,比如一個控制台或者winform程序,IDE此刻會調用操作系統的程序載入器把步驟4生成的可執行文件載入到內存中,並跳轉到它的入口方法處開始執行。於是你就看到了你的程序界面。注意:以上說的是預編譯類語言的IDE在背後所做的事情,並且為了敘述簡便有些地方並不嚴謹。對於JavaScript等解釋型語言,是運行時才由編譯器即時編譯並執行的。有的語言如Java,C#則介於兩者之間,可執行文件是先編譯為虛機(或稱運行時)的偽機器指令,然後在運行時又即時編譯為機器指令執行的。詳細信息還是看書吧。^_^作為一個搬磚十餘年的碼農,經常在接觸到一本好書時有怎麼早沒發現這本書的遺憾。所以希望以上的回答在你剛開始接(入)觸(坑)這個行業的時候幫到你。你覺得IDE老是隔著一層,熟悉一下相關係統和相關語言的CLI模式編程就行了。真要從根上理解那就是個大課題了,和IDE不IDE沒關係。應用方面牽涉到編譯器的優化,原理方面牽涉到更基礎的知識。
去linux手動編譯一波代碼你就知道了,特別是寫makefile……
《程序員的自我修養》
那你就老老實實學編譯原理。不過看你剛學編程,還是從最基礎的編程學起,步子大了容易扯著蛋……
按照某些人推薦的從底層開始學習當然是一種好方法,然而前提是什麼有一個不厭其煩解答問題的大牛。。。。
像我這種平頭哦不刺兒頭百姓只能用VS這種「面向新手」的IDE了。 (逃只能表示,用vim這樣純手的編輯器,能夠讓你寫代碼時候更靜心,並且工程量一大的話,也讓你對你自己代碼記得更清晰。但是你如果用這來看別人寫的代碼,特別是寫的一坨的代碼。你會覺得非常痛苦非常蛋疼,瞬間你還是會覺得ide好
很簡單,脫離windows,看這2本書,linux程序設計,程序員的自我修養鏈接裝載與庫. 可以用ide如eclipse寫代碼,用gcc/makefile編譯
推薦閱讀:
※如何開發中文演算法?
※各種常見的編程語言最廣泛應用的領域分別是什麼?
※為什麼C++不能返回數組?
※現在有哪些比較大型的網站是用 Python 開發的?
※零基礎如何學好編程?