作者:極客小俊
一個把邏輯思維轉變為代碼的技術博主
概述
編譯器,可以簡單地將它理解為一種翻譯器, 就類似于專門的翻譯一樣, 要知道,計算機只認識二進制也就是 0 和 1 組成的代碼指令
而我們平常所編寫和開發的的 C 、C++、java、php、Go、python等等代碼計算機本身是根本無法識別的,只有將這些程序代碼中的每條語句翻譯成對應的二進制指令,計算機才能執行, 這就是編譯器的核心作用!
GCC 全稱 GNU Compiler Collection 是由GNU開發的編程語言編譯器 所以說 GCC就是C語言的翻譯器
那么GNU又是一個什么鬼? 這是一個了不起的計劃 什么計劃呢? 說到這個就不得不說一下歷史了
在 1983 年 有一個叫理查德·斯托曼的人發起的名為GNU計劃 他的目標是打造出一套完全自由也就是自由使用、自由更改、自由發布、開源的操作系統, 你可以理解為不要錢! 然后這個系統就暫定為GNU 操作系統并且也設計出了這套系統的內核并命名為The Hurd
但是這個計劃還沒有搞出個啥花樣就橫空出世了另外一個開源操作系統Linux, 這個大家都知道吧 , 所以最終經過種種事情之后(此處省略幾百字) , GNU 計劃選擇Linux 作為 GNU 操作系統的內核, 那么GNU有了這個Linux基礎之后就基于這個平臺開發了許多系統的部件 其中就有一個部件叫做GCC
現在有些人叫GNU/Linux 還有些人直接就叫Linux 也就是這么來的, 所以有的時候你可以理解為GCC就是為開源系統打造的一款編譯器也可以說是Linux 下的C/C++ 編譯器
最初GCC 的確只是用來翻譯C語言的, 隨著時間的迭代不斷的更新 ,不斷的進步,GCC的翻譯功能也得到了很大的擴展, 它不僅可以用來編譯 C 語言,還可以編譯 Fortran、Pascal、Objective -C、Java、Ada、Go 等多種編譯語言所編寫的代碼
那么此時此刻的GCC功能上也已經不在單一了,而是一整套的組合拳功能, 是支持多種程序語言的編譯器,算是一種編譯器合集Compiler Collection 后來就被叫做 GNU編譯器套件
GCC和Linux淵源極深, 目前幾乎所有的 Linux 發行版默認安裝有 GCC編譯器
我們既然學習的是C語言,那么GCC的核心目的是將我們編寫的C語言程序編譯成一個二進制可執行文件
GCC編譯器本身是沒有界面窗口,使用它必須編寫對應的gcc 命令, 所以熟悉gcc命令就顯得很重要了,否則你怎么編譯你的C語言程序代碼呢?
當然你也可以使用集成開發環境IDE 這些通常都集成了 GCC 編譯器,例如:Visual Studio 2019, 集成了GCC 編譯器功能的同時,還向用戶提供了友好的可視化編輯界面, 不用你去記憶那么多的gcc命令照樣可以肆無忌憚的編譯你的C語言程序代碼, 相對而言降低了學習成本, 但個人建議GCC的基本命令還是要學一下
但不是所有的IDE都集成了GCC的, 如果沒有集成GCC 那么你就可能只有通過手工來進行代碼的編譯操作,也就是通過GCC的命令,來執行你的C語言文件, 這個就要分人了,有些人喜歡可視化操作,有些人習慣了命令行操作用相應的 GCC命令來編譯C語言或其他程序
概述
MinGW 全稱是:Minimalist GNU on Windows 你可以暫時理解它是一個移植到了 windows系統平臺下的極簡GCC編譯器
我們知道GCC是在Linux系統上自動就預裝好了的編譯器, 那么我們有了MinGW 就可以在windows系統中使用GCC編譯器了, 也就是說可以將C語言的源代碼編譯生成 Windows 下的可執行程序
小提示: 官網提供的 GCC 編譯器是無法直接安裝到 Windows系統平臺上的, 如果我們想在 Windows 平臺使用 GCC 編譯器,就要安裝 GCC 的移植版, 也就是 MinGW 當然還有Cygwin這就不過多贅述了!
總的來說 MinGW 就是 GCC 的 Windows 版本
MinGW 是開源軟件,免費使用,一些開源社區持續維護, 支持最新的 C語言 標準
題外話并且目前很多IDE里面集成有GCC, 但實際只是也就是將 MinGW 封裝在這些IDE里面 ,讓MinGW有圖形化界面,操作簡單,但內核其實就是MinGW
如果你選擇的是一些IDE自帶的編譯器來編譯C語言, 可能會自動生成一大堆雜七雜八的工程文件, 搞得新手摸不著頭腦, MinGW 則只會生成一個可執行文件
所以對于初學 C語言 的朋友來說,MinGW 是一個不錯的選擇
總體來說MinGW 就是需要你動動手, 會一些gcc命令 等等就可以來對C語言的源代碼進行編譯成window下的可執行文件
而一些IDE則是通過點點按鈕就自動編譯了,不需要你使用gcc的一些相關命令都可以
MinGW的下載地址如下:
https://osdn.net/projects/mingw/
https://sourceforge.net/projects/mingw-w64/files/
打開地址后在其中找到 Downloads 下載鏈接, 單擊進入稍等片刻就開始下載了
下載方式
下載完成后,會得到一個名為 mingw-get-setup.exe 的安裝包,雙擊打開它,
可以看到如下的對話框, 直接點擊Install,即可
根據你自己的需求點擊change按鈕可以修改安裝路徑,建議不要在C盤, 這里我安裝在D盤, 然后點擊continue
進入 MinGW 配置器下載的界面,稍等一下, 待安裝完成顯示 100%就可以了, 安裝完成之后點擊continue,會自動彈出MinGW Installer Manager配置界面
進入到 MinGW Installer Manager 的界面, 它的作用是隨時根據需要修改 GCC 編譯器的配置
為了同時支持編譯 C 語言 和 C++我們這里只需要選擇兩個選項:
mingw32-base-bin這個是用來編譯C語言的
mingw32-gcc-g++-bin 這個是用來編譯C++語言的
如圖
在指定的選項上單擊鼠標左鍵 選擇Mark for installation打上安裝標記就可以了, 如果選擇錯誤了就點選Unmark取消標記就可以了,
個人建議全部選擇免得麻煩!!
選擇好了之后, 在菜單欄中選擇Installation ----> Apply Changes
會彈出如下對話框 ,點擊Apply 然后稍等片刻,直至安裝成功即可!
當安裝成功之后 顯示如下圖, 點擊close按鈕關閉即可!
到此MinGW安裝就完成了!
并且在我的D盤的MinGW目錄下會出現以下文件夾
小提示
如果有某些組件下載失敗,沒關系, 可以通過之前的MinGW Installer Manager安裝界面進行手動選擇指定的安裝包進行再次安裝 ,比如說安裝完成之后你會發現bin目錄下沒有gcc這個執行程序
那么就可以通過MinGW Installer Manager來進行再次手動的選擇安裝 就可以了
所以MinGW Installer這個程序新手朋友們不要刪除哦 , 免得到處找都找不到~
科普一下 為什么要設置環境變量?
舉個栗子
比如: 我們這里需要gcc.exe執行程序來編譯C語言源代碼, 那么這個gcc.exe程序文件在我電腦中的路徑是D:\MinGW\bin下的
如圖
那么如果我們要使用cmd命令行的形式來打開這個gcc.exe 是不是要使用一些基本的dos命令來進入到這個目錄下對吧
如下圖
通過這樣子的方式來打開gcc 你不覺得很麻煩嗎?但是難道我們每次要運行這個程序的時候都要先找到該.exe文件所在的路徑, 然后運行,顯然很蹩腳, 這時候就需要環境變量了
環境變量是在操作系統中一個具有特定名字的變量對象,它包含了一個或者多個應用程序所將使用到的信息
當要我們求操作系統來運行一個程序的時候, 但又沒有告訴它程序所在的完整路徑時,那么操作系統除了在當前目錄下面尋找此程序外,還會自動的到環境變量中的Path路徑去找 用戶通過設置環境變量,來更好更加方便的來運行程序!
所以我們的gcc.exe 也應該配置到 環境變量中去,方便我們執行編譯的操作!
如何手動配置gcc.exe到環境變量中?
我們依次打開 我的電腦----->屬性 -----> 高級系統設置-----> 環境變量
win10系統中有兩種環境變量:用戶變量和系統變量
可以配置到當前用戶變量的Path里面, 也可以配置到系統變量的Path里面
系統變量配置以后,整個計算機操作系統的所有用戶有效
用戶變量配置以后,僅對于當前計算機用戶有效。
而系統變量與用戶變量的Path的意思都是告訴操作系統在找的可執行文件存放的路徑,它的查找流程如下:
1.當操作系統在執行一個用戶命令或打開一個程序時,如果沒有給出給文件的絕對路徑,那么就會在當前目錄下尋找相應的可執行文件
2.如果當前目錄找不到對應可執行文件或程序,就會在`系統變量`的`Path`的路徑列表中去尋找, 從上到下依次查找,最前面一條的優先級最高,如果找到程序就停止查找,后面的路徑也不再執行了
3.如果`系統變量`的`Path`中的路徑列表都找不到,那么再到`用戶變量`的`Path`路徑列表中去繼續尋找
所以系統變量針對所有用戶,而用戶變量是當前用戶私有的, 這個根據你自己的情況來選擇就可以了
我這里就暫時配置到系統變量的Path中去, 選中Path 然后點擊編輯按鈕, 然后點擊新建按鈕
我這里的gcc.exe目錄為D:\MinGW\bin, 那么新建之后的值就為它, 完成之后點擊確定返回就可以了!
如圖
到此環境變量的配置就完成了, 選中就可以編譯我們的C語言程序代碼了
你可以先打開cmd命令行窗口 輸入以下命令先測試一下:
gcc++ --version
g++ --version
gdb --version
如果看到以下輸出 說明正確配置了環境變量
卸載MinGW很簡單, 找到MinGW的安裝文件夾, 然后鼠標右鍵單擊選擇刪除,就可以卸載了
并且把之前配置好的path環境變量的相應目錄路徑也刪除掉!
win10下如何打開環境變量
我的電腦----->屬性------->高級系統設置----->選擇高級選項卡, 在最下面就可以看到環境變量
然后打開環境變量之后 點開, 再找到系統變量, 其中就有一個Path的變量, 點擊編輯
然后找到之前配置的MinGW目錄 刪除就可以了!
通過以上的安裝和環境變量的配置之后,我們就可以在當前 Windows 平臺上編譯和運行我們的 C 或者 C++源代碼程序了
舉個栗子我們現在要輸出一個經典的Hello, World!字符串
代碼如下
#include<stdio.h>
int main(void) {
printf("Hello, world!\n");
return 0;
}
打開記事本程序,復制一下以上的代碼
然后另存為 hello.c文件 , 我這里就暫時保存到桌面
如圖
然后在桌面打開cmd 在命令行中執行如下命令:
C:\Users\Administrator\Desktop>gcc hello.c -o test1
然后就會在桌面上生成一個test1.exe的可執行文件, 再次在命令行中輸出這個test1名稱即可輸出最終結果!
如圖
概述
每次通過記事本和cmd方式單獨地使用gcc編譯器來輸出你的C語言代碼肯定不太方便對吧,那么就選擇一款IDE集成開發環境來編輯你的C語言代碼吧!
IDE 英文全稱為: Integrated Development Environment 中文意思就是 集成開發環境
集成開發環境的的核心作用就 用來編寫代碼的
使用IDE的好處
以上這些功能都被融入在了 集成開發環境當中!
這里在windows系統下我個人推薦CLion、Visual Studio Code、Visual Studio , 當然最好是你通過一段時間的C語言學習之后,再來使用這些IDE工具肯定會更加得心應手! 如果你是新手其實不建議一上來就使用IDE
CLion 下載地址 https://www.jetbrains.com/clion/
使用CLion 來編譯C語言,你總要先下載安裝吧,建議若條件允許購買正版吧,你懂的 這里就不在過多贅述了!
安裝好CLion 之后打開它, 然后點擊New Project
然后彈出以下對話框, 選擇C Executable 之后根據你自己的需求設置項目保存路徑,Language standard語言標準選擇C99就行了, 完成之后點擊create就可以自動生成項目了
如圖
然后你就會看到自動生成好的項目的目錄結構和一段基本的C語言代碼
在CLion中配置MinGW
如果之前你安裝了MinGW 那么最好在這里也在CLion配置一下, 方法如下
點擊File菜單下的Settings選項
然后選擇Build、Execution、Deployment(構建、執行、部署)選項下的Toolchains(工具鏈)選項
它會自動檢測到MinGW的安裝路徑, 確保這里沒有任何問題之后點擊ok
最后我們就可以點擊右上角綠色的的Run按鈕 開始編譯我們的C語言代碼了
CLion控制臺輸出中文亂碼
如果你想用printf輸出中文,但是出現以下亂碼的情況
如下圖
解決辦法:
既然是亂碼 那么肯定是編碼不正確導致的,所以修改一下CLion中的編碼設置就可以了
首先最好保證我們整個項目的文件編碼統一
點擊File菜單下的Settings選項, 然后選擇Editor下的File Encodings(文件編碼)
把所有位置都設置為UTF-8編碼 ,這是為了你在代碼區編輯中文的時候 編碼統一
如下圖
然后點擊右下角的UTF-8位置,會彈出當前輸出窗口的內容編碼, 這里修改為GBK編碼
然后會彈出一個對話框選擇Convert轉換按鈕就可以了
最后就可以正常輸出中文字符串了!
修改控制臺活動頁字符集
當然如果懂一點的朋友 可以通過修改控制臺代碼頁字符集為utf-8這樣來解決CLion漢字中文亂碼問題
只要在源代碼中加入一行代碼就可以了
代碼如下
#include <stdio.h>
int main() {
system("chcp 65001"); //修改控制臺活動頁字符集為utf-8
printf("北京市, 朝陽區!\n");
return 0;
}
如圖
這樣不用在底部修改當前輸出窗口的內容編碼也是可以達到不會亂碼的效果!
Visual Studio Code我主要是用來寫前端,對于java和C這樣要編譯的語言來說用它來寫就要做一定的配置和環境的搭建,因為默認情況下VS code不能直接對于C語言進行編譯和調試的 所以雖然不是很方便,但是它免費啊!
要使用VS code來編輯和運行我們的C語言代碼,前提是要下載好VS code和提前安裝好集成gcc的MinGW
Vs code下載地址: https://code.visualstudio.com/
下載和安裝這里就不過多贅述了,很簡單 !
打開VS code 直接在插件市場中搜索以下插件:
C/C++
Code Runner
C/C++ GNU Global
C/C++ Compile Run
點擊這些插件上的Install按鈕, 先把這些插件都安裝上!
安裝完以上插件之后,隨便在那個磁盤下建立一個test_c的空目錄
然后選擇File---->Open Folder 選擇你剛才創建的空文件夾目錄
如圖
也可以選擇Add Folder to workspace..來添加工作目錄
然后在左側就可以顯示出剛才所選擇的文件夾目錄了,這也就是你的項目文件
接下來就新建一個.c的代碼文件
如下圖
我們在test_c文件夾下新建一個名為hello.c的文件,然后復制以下代碼
#include <stdio.h>
int main() {
printf("hello world!\n");
return 0;
}
最后點擊右上角的運行按鈕就可以執行C語言代碼程序了!
效果如下圖
概述
Visual Studio我們簡稱VS 是美國微軟公司的集成開發環境, 可不是VS code哦這兩個不一樣的!, 它可以支持C、C++、C#、F#、J# SQL Python等語言的開發 還是很強大的一款IDE
Visual Studio下載地址https://visualstudio.microsoft.com/zh-hans/downloads/
個人的話建議下載社區版免費的,學習和普通開發完全足夠了, 安裝非常簡單 就不過多贅述了!
安裝的時候唯一只有一個地方要注意的就是: 使用C++桌面開發這一項要勾選上,否則可能會導致你的C或C++代碼無法正常運行!
如圖
VS 新建項目
安裝好了之后打開VS
然后在彈出的對話框中選擇c++空項目
接下來就填寫項目配置了
項目名稱之后生成的項目文件夾名稱和工程名稱都是這個, 這個目錄會自動生成!
項目位置也就是選擇你項目保存的目錄位置
勾選解決方案和項目放在同一目錄中,以后便于調試。
單擊創建, 此時應該在桌面會生成一個test_c的文件夾目錄
然后就也進入到VS的編輯界面了 , 接下來添加C語言代碼源文件
在左側的解決方案下方的test_c項目文件夾中,選中源文件 右鍵單擊然后選擇添加---->新建項
如圖
小提示: 如果你在左側沒有看到解決方案資源管理器的話 那么可以按下鍵盤上的快捷鍵ctrl+Alt+L來進行打開
然后選擇C++文件(.cpp), 把文件名稱的后綴需要修改為.c 這里我新建名為hello.c的源文件
如下圖
然后還是輸入以下代碼
#include <stdio.h>
int main()
{
printf("Hello World");
return 0;
}
接下來按下快捷鍵Ctrl+F5直接編譯運行, 結果如下圖所示
到此你已經開啟C語言的學習之路了!
"點贊" "評論" "收藏"
大家的支持就是我堅持創作下去的動力!
如果以上內容有任何錯誤或者不準確的地方,歡迎在下面 留個言指出、或者你有更好的想法,歡迎一起交流學習
這是微軟的內核工程師 Axel Rietschin在Quora的一個回答。
Windows 10 的code base 和Windows 8.x , 7 , Vista , XP , 2000 和Windows NT的code base 是相同的,當然是演化過來的,其中的每一代都進行了重大的重構,增加了大量的新功能,提升了性能和對硬件,安全的支持,并且保持了高度的向后兼容性。
(注:考慮到Windows的眾多版本和海量應用,這是一個很了不起的成就, 也是一個很大的包袱。)
Windows 的大部分內核(ntoskrnl.exe)是用C語言寫的,你可以在Github上看到泄露的Windows Research Kernel 代碼,自己研究一下,雖然它已經相當過時,非常不完整,但依然能看出一些重要的東西。
代碼庫在這里:
https://github.com/markjandrews/wrk-v1.2
比如說,我們熟悉的注冊表(Registry),在內核中被稱為配置管理(configuration manager,簡稱cm),就在這個目錄下:wrk-v1.2/base/ntos/config
(注:Windows Research Kernel是微軟為教育目的提供的源代碼。高校師生可以修改,編譯,以此來學習OS的原理。在Linux大行其道的時候, 不知道有多少高校在用?)
大部分運行在內核態的代碼都是用C語言寫的,包括大部分的文件系統, 網絡,大部分的驅動, 其中也有一些C++。
如果往上走進入到用戶態,C語言就會變少,C++會逐漸增多。
大多數人都沒有意識到Windows的龐大規模:這是一個真正的史詩般的巨型項目。
在Windows的代碼樹中,有源代碼,測試代碼,還有其他東西(碼農翻身注:可能是圖標,聲音,圖片?),文件數超過400萬,500多G。
僅僅是把這個代碼樹的目錄和文件名都瀏覽一遍,就要花費你一年的時間。這里有50多萬個文件夾,其中的代碼組成了操作系統工作站和服務器的所有版本,相關工具,開發工具包。
如果你想把源代碼都讀一遍,可能要窮盡一生。
下面是一個截圖,描述了Windows源碼的統計信息:
有一次,我有幾周的時間沒有更新我的Git, 等我回來的時候,我發現它已經落后60,000次提交了!
你肯定會說一個人不可能閱讀完每天的代碼提交,更不用說過去三十年積累的代碼了。
如果你看到了Windows 10 “DVD” 并且想知道是什么編程語言創造了光盤上的東西,我猜98%是C和C++, C是大頭。
.NET BCL(Base Class Library) 和其他庫&框架主要是用C#寫的,他們僅僅是C語言海洋(有一點C++小島)小水滴而已。它們來自不同的部門(The developer’s division), 代碼也不是Windows代碼樹的一部分。
學習C/C++編程知識,想要成為一個更加優秀的程序員,或者你學習C/C++的時候有難度,可以來筆者的C++編程學習圈,里面不僅有學習視頻和文件資料,還有更多志同道合的朋友,歡迎轉行也學習編程的伙伴,和大家一起交流成長會比自己琢磨更快哦!
學習C/C++編程知識,想要成為一個更加優秀的程序員,或者你學習C/C++的時候有難度,可以關注+私信小編【C/C++編程】筆者的C語言C++零基礎編程學習圈,里面不僅有學習視頻和文件源碼,還有更多志同道合的朋友,歡迎轉行也學習編程的伙伴,和大家一起交流成長會比自己琢磨更快哦!