C語言探索之旅 | 第一部分第三課:你的第一個程序

做者 謝恩銘,公衆號「程序員聯盟」。 轉載請註明出處。 原文:www.jianshu.com/p/c73fecacd…git

《C語言探索之旅》全系列程序員

內容簡介


  1. 前言
  2. 控制檯程序仍是窗口程序
  3. 最基礎的代碼
  4. 特殊字符
  5. 註釋,頗有用
  6. 總結
  7. 第一部分第四課預告

1. 前言


在上一課 C語言探索之旅 | 第一部分第二課:工欲善其事,必先利其器 中咱們說過,你能夠用本身喜歡的 IDE,或者用文本編輯器、編譯器和調試器這樣的組合來學習本課程。github

不過,我以爲對於初學者,仍是有必要演示一下某款 IDE 的具體下載和安裝等操做。我就以 Code::Blocks 這款免費開源且跨平臺的 IDE 爲例吧。編程

下載 Code::Blocks


先去 Code::Blocks 的官方下載頁面:www.codeblocks.org/downloads/b…bash

2020 年 3 月 29 日 Code::Blocks 終於更新了 20.03 版(不容易啊,上一次的版本仍是 2017 年的),不過惋惜的是 macOS 的版本仍是停留在 13.12(網站上標識的是 13.12,但實際安裝以後是 17.12 版)。app

  • Windows 用戶請下載 .exe 的文件,通常來講是下載 codeblocks-20.03mingw-setup.exe 這樣的最新的 .exe 的安裝文件。記得要有 mingw 字樣的,才包含 GCC 編譯器和 GDB 調試器。編程語言

  • Linux 用戶請下載對應你的操做系統的版本。目前有 Debian、Ubuntu 和 RedHat 系。Ubuntu 能夠用 apt 命令來安裝,請看官方文檔。編輯器

  • 蘋果 macOS 用戶請下載最新版的 dmg 文件,例如 CodeBlocks-13.12-mac.zip。不過這個版本有點舊了,可能會有 bug。函數

安裝運行 Code::Blocks


Code::Blocks 的安裝很簡單,和安裝 QQ 這樣的普通軟件沒多大區別,一路默認到底就好。工具

安裝完以後雙擊運行,你能夠看到相似下圖的界面:

上圖中標註了四個區域:

  1. 工具欄:有不少按鈕,但只有幾個是咱們時經常使用到的。
  2. 項目文件列表區:左邊的欄裏面顯示了你的項目的全部文件。
  3. 主界面:寫代碼的地方。
  4. 通知欄:會看到運行的錯誤,編譯的問題,等等。

那麼,如何建立一個 C語言基本的控制檯應用程序呢?

首先到菜單裏,依次點擊「File -> New -> Project」,

會打開相似以下的窗口:

建立新項目

能夠看到,Code::Blocks 支持很是多的程序類型,這些程序類型用到不一樣的庫,好比 SDL(開發 2D 程序),OpenGL(開發 3D 程序),Qt 和 wxWidgets,等等。甚至還支持 Arduino、ARM 這樣的嵌入式項目。

目前,這些圖標不少都只是好看而已,由於你還沒安裝對應的庫,全部不能用。

暫時咱們只用最基本的 Console application(表示「控制檯應用」,簡單來講就是會彈出一個框,裏面顯示程序運行的結果,你也能夠輸入東西)。

選擇 Console application,點擊 Go 按鈕到下一步:

這一步是讓你選擇要使用的編程語言,有 C 和 C++ 兩個選項,咱們選擇 C,表示要建立的是 C語言的項目。而後點擊 Next 進入下一步:

項目配置

Project Title 裏面填寫你要建立的項目名稱,咱們填的是著名的 HelloWorld。Folder to create project in 是選擇項目存放的路徑。

Project filename 是指項目文件名稱,能夠看到是 .cbp 結尾的文件類型,cbp 是 Code Blocks Project 的首字母縮寫,表示「Code::Blocks項目」。

點擊 Next 到下一步:

進一步配置

這裏咱們沒必要更改什麼,默認就好。點擊 Finish(「完成」)結束配置,Code::Blocks 就會建立你的第一個項目了。

打開 Sources 裏的 main.c 這個 C語言的源代碼文件。點擊上面工具欄裏有一個綠色的三角形按鈕,是用於運行程序,它會提示你是否要編譯,點擊 yes(固然了,你也能夠點擊綠色三角形邊上的帶齒輪的綠色三角形按鈕,是用於「編譯再運行」),運行起來後咱們的第一個控制檯程序輸出:

Hello world!
複製代碼

運行結果

2. 控制檯程序仍是窗口程序


如今,既然咱們已經把舞臺都搭好了,該是時候把咱們的主角 C語言請出來了。咱們將一塊兒來寫第一個 C語言程序。

固然了, 這個程序會是黑白的,也不會跟你打招呼,更不會幫你泡咖啡。可能顯得毫無用處,但倒是你的第一個程序,我保證你會有成就感的。

咱們在 Code::Blocks 這個 IDE 中看到,當你要建立一個項目時,IDE 會問你是建立 console(控制檯)程序仍是 window(窗口)程序。

以前咱們爲了快速演示,選擇的是控制檯程序。

其實只有這兩種類型,沒有其餘的了:

  • 窗口程序
  • 控制檯程序

先來介紹一下窗口程序,由於比較直觀,比較漂亮,顏值爆表。

這樣的程序你確定見到過,下圖對大多數人來講很熟悉吧。

Windows 系統的畫圖程序

是的,上圖就是 Windows 系統的畫圖程序。它是一個窗口程序,就是有窗口的程序(有時候不止一個窗口)。我想你確定想學習建立這樣的程序,可是若是你是第一次接觸編程,那有點難。

一開始仍是最好從 console(控制檯)程序入門。

那麼,所謂的控制檯程序長什麼樣呢?

最初的程序都是控制檯程序,由於那個年代電腦還只能顯示黑白色,並且也沒有強大到能夠運行窗口程序,不像今天的電腦。

固然了,時代在進步。Microsoft(微軟)公司的 Windows 系統使得電腦能被廣大羣衆使用,就是由於它操做很簡單,幾乎全部操做均可以用窗口程序完成。

Windows 實在是太流行了,以致於大多數人都不知道 console(控制檯)程序長什麼樣。不過,我有一個好消息:「控制檯程序並無死!」

實際上,Linux 操做系統給不少的人展現了控制檯程序的魅力,下圖就是 Linux 下的控制檯程序的截圖:

Linux 的 Terminal 終端

看上去還不錯,是嗎?好了,如今你已經對控制檯程序有了初步概念了。

有一些注意點:

  1. 今天電腦已經能夠顯示彩色了,因此上面看到的控制檯也不是徹底黑白的了。
  2. 對於初學編程的人來講,控制檯仍是使人不太適應的。
  3. 若是咱們掌握了這個工具,能夠用它來作不少事情。

就如咱們上面提到的,建立像上圖中的控制檯程序,其實很簡單,並且很是適合初學者。如今的控制檯程序不只能夠顯示彩色,並且若是你要給它設置一個背景圖片,也是能夠辦到的。

說了這些,那是否是隻有 Linux 纔有控制檯程序,Windows 就沒有呢?

固然也有,在 Windows 中它被稱爲 cmd,也就是 command(表示「命令」)的縮寫,也稱爲「命令提示符」,是 Windows 環境下的虛擬 DOS 窗口。只不過它比較隱祕。能夠用如下兩種把它請出來:

  1. 點擊「開始 -> 搜索 -> 輸入「cmd」,而後按回車鍵,或點擊「肯定」。
  2. 用組合鍵 win+R 調出 (win 鍵就是鍵盤最下面從左邊數第二個鍵,上面有個 Windows 系統標誌的),再輸入 cmd,而後按回車鍵,或點擊「肯定」。

cmd 程序,也就是「命令提示符」

上圖就是 Windows 裏面奇妙的控制檯。

固然了,蘋果的 macOS 操做系統中,咱們也能夠打開控制檯的,只要運行 Terminal 這個系統自帶的應用程序:

3. 最基礎的代碼


對於 C語言的每個程序,咱們都要輸入最基礎的幾行代碼。這幾行代碼不是太特別,可是必不可少。

咱們如今就來看看「最基礎的代碼」長什麼樣。

讓 IDE 爲咱們生成「最基礎的代碼」


以前咱們已經演示了,Code::Blocks 會爲咱們生成 C語言程序的最基礎代碼,以下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("Hello world!\n");
    return 0;
}
複製代碼

最基礎的代碼

其中

int main()
複製代碼

這一行也能夠寫成

int main(int argc, char *argv[])
複製代碼

兩種寫法都是能夠的,不過第二種(複雜一些的)更經常使用,也更專業。之後的課程咱們會用 int main(int argc, char *argv[]) 這種形式。

分析最基礎的代碼


對於第一次接觸編程的朋友,可能這個最基礎的代碼也是使人難以理解。

因此咱們纔要一塊兒來學習如何閱讀代碼。

先從前兩行開始吧:

#include <stdio.h>
#include <stdlib.h>
複製代碼

這兩行很特別,咱們會在源代碼開頭的地方見到這樣的以 # 號開頭的語句。像這樣特別的行,稱爲預編譯指令

這個術語聽起來有點複雜。預編譯指令會在編譯開始的時候,被一種叫作預編譯器的程序所讀取。

其實編譯器爲咱們作不少事情,咱們以後的課程會詳細來講明。

可是這兩行究竟是什麼意思呢?

這裏的 # 號是預編譯指令開始的標誌,沒有什麼特別的含義,後面接着的 include 表示「包含」,因此這兩句話的意思就是在咱們的程序裏包含 stdio.h 和 stdlib.h 這兩個文件,這兩個文件在系統的庫裏已經存在了,這些文件被稱爲庫文件

若是沒有這兩句話,那咱們就不能在程序裏調用這兩個文件定義的東西了。

接着,咱們看到了下面的語句:

int main()
{
    printf("Hello world!\n");
    return 0;
}
複製代碼

以上咱們所看到的語句塊,被稱爲函數。其實 C語言的程序基本就是由函數來構成的。因此目前咱們的程序只有一個函數。

咱們如今還不會講不少函數的細節,由於那將是後面的函數那一課的內容,如今還早。可是咱們會大致說一下函數的組成。

第一行包含了函數的名字,是第二個單詞 main。因此這裏的函數稱爲 main 函數。這是一個特殊的函數,程序執行老是從 main 函數開始。

一個函數有開始和結束,使用大括號 {} 來標識。因此咱們的 main 函數包含如下兩行代碼

printf("Hello world!\n");
return 0;
複製代碼

這些在函數裏的行也有名字,被稱爲指令。每一條指令都會讓電腦作特定的事情。一個函數大致來講是用來集中必定數目的指令。好比咱們能夠建立一個函數叫作「打開文件」,這個函數會讓電腦爲你打開某個文件。

函數的優點就是當你寫好了這個函數以後,你只須要使用(專業術語叫作調用)「打開文件」這個函數,電腦就會爲你執行函數裏面的指令。你沒必要每次在須要實現「打開文件」功能的地方都重複寫那些指令。函數能夠大大節約代碼空間,提升效率。

printf("Hello world!\n"); 
複製代碼

這一行指令使得屏幕顯示 "Hello World!"(表示「你好,世界!」)這一句話。當你的程序執行到這一行時,就在屏幕上顯示相應的信息。而後會執行下一個指令。

printf 也是一個函數,定義在 stdio 庫中,如今你知道

#include <stdio.h>
複製代碼

這句話的重要性了吧,若是沒有引入 stdio 這個庫,那咱們的 main 函數就不能調用 printf 這個函數。

第二個指令 return 0; 大體就是表示函數結束了,而且返回 0 值。

那麼,爲何個人函數返回 0,不是返回其餘值呢?

實際上,每一個 C語言程序結束時都會返回一個值,0 表示一切正常結束,其餘的值表示異常。

這裏咱們只是簡單介紹了一下函數的概念。關於函數的細節,請期待以後的課程。

測試你的程序


在 Code::Blocks 裏面編譯(Build / Compile)並運行(Run) 你的最基礎代碼。獲得以下結果

運行結果

能夠看到你的第一個程序在屏幕上顯示了 "Hello world!"。

下面的那幾行文字是 Code::Blocks 生成的,表示程序順利執行,而且耗時 0.297 秒。

"Press any key to continue"這句話是讓你按鍵盤上的任意鍵來退出控制檯程序。

4. 特殊字符


特殊字符的做用是用來表示「換行」,「隔開一個製表符的空間」,等等。

特殊字符很好辨認,常常是兩個字符的組合,第一個字符是反斜槓(\),第二個字符是一個數字或者一個字母。

下面的兩個特殊字符是咱們常常會用到的:

  • \n :換行符 (做用相似按回車鍵)。
  • \t :製表符 (做用是空出幾個空格。空格的數目能夠配置)。

5. 註釋,頗有用


在結束這一課前,咱們必須再來說一下註釋。不論什麼編程語言,咱們均可以在源代碼裏添加註釋。C語言固然也不例外。

註釋,究竟是什麼啊?

簡單地說,註釋就是在你程序之中用來標註這個程序的做用,某一行代碼的做用,等等的文字。註釋真的很重要,由於即便是一個計算機天才,也要在某些地方作一些註解。註釋有以下做用:

在以後閱讀本身寫的代碼時不至於迷失方向。不能否認,在從新閱讀以前寫的代碼時,咱們經常會忘記這個函數是幹什麼的,那個地方爲何要這樣寫。特別是代碼量很大,幾千幾萬行甚至更多時,若是沒有註釋,那閱讀起來會很費力。

若是你把你的代碼給別人閱讀,註釋每每能夠節省對方理解你的代碼的時間。

要在 C語言的代碼中插入註釋,有幾種形式:

  • 若是你的註釋比較短,在一行裏就能寫完,那能夠用 //... 這樣的形式。
  • 若是你的註釋跨越好幾行,那能夠用 /* ... */ 的形式。

雖然程序行數變多了,可是註釋卻使咱們的代碼變得易讀不少。編譯代碼的時候,編譯器會忽略全部的註釋,這些註釋不會出如今最終的程序裏,只是爲程序員服務的。

記住: 註釋要起到引導閱讀代碼的做用,以便理清頭緒。可是不要在很顯然就能懂的地方添加註釋。

引用 IBM 公司的一句格言: 「若是一個程序,在你僅僅看完它的註釋以後,你不能瞭解它的做用,那麼把這個程序扔了吧。」 -- 大公司就是這麼嚴格,這麼任性。

6. 總結


  1. 程序能夠經過一個控制檯(Console)或者窗口(Window)和用戶交互。
  2. 對初學者來講用控制檯來編寫第一個程序要簡單不少,雖然不太吸引人。
  3. C語言的程序主要是由分號結尾的語句構成的。
  4. 多條指令能夠寫在一個函數裏,就好像包裝在一個盒子裏同樣。
  5. main 函數是程序的啓動函數,程序運行時會執行 main 函數裏的指令。
  6. printf 函數使咱們能夠在控制檯的屏幕上顯示信息。
  7. printf 函數是定義在一個庫(Library)中的。庫中常常包含不止一個函數,能夠給咱們程序調用。

7. 第一部分第四課預告


今天的課就到這裏,一塊兒加油吧!

下一課:C語言探索之旅 | 第一部分第四課:變量的世界(一),內存那檔事

下一課開始,咱們一塊兒探尋 C語言的變量的奇幻世界,還會聊到內存哦,有些難度。


我是 謝恩銘,公衆號「程序員聯盟」運營者,慕課網精英講師 Oscar 老師,終生學習者。 熱愛生活,喜歡游泳,略懂烹飪。 人生格言:「向着標杆直跑」

相關文章
相關標籤/搜索