C 語言簡單編程速成

2020-10-19 Linux中國

我們將所有的 C 語言要素放置到一份易讀的備忘錄上。

• 來源:Linux.cn • 作者:Seth Kenlon • 譯者:鄭 •

(本文字數:5500,閱讀時長大約:8 分鐘)

我們將所有的 C 語言要素放置到一份易讀的備忘錄上。

1972 年, 丹尼斯·裡奇(Dennis Ritchie)任職於 貝爾實驗室(Bell Labs),在幾年前,他和他的團隊成員發明了 Unix 。在創建了一個經久不衰的作業系統(至今仍在使用)之後,他需要一種好的方法來對這些 Unix 計算機編程,以便它們可用執行新的任務。在現在看來,這很奇怪,但在當時,程式語言相對較少,Fortran、Lisp、 Algol 以及 B 語言都很流行,但是,對于貝爾實驗室的研究員們想要做的事情來說,它們還是遠遠不夠的。丹尼斯·裡奇表現出一種後來被稱為程式設計師的主要特徵的特質:創造了他自己的解決方案。他稱之為 C 語言,並且在近 50 年後,它仍在廣泛的使用。

為什麼你應該學習 C 語言

今天,有很多語言為程式設計師提供了比 C 語言更多的特性。最明顯的是 C++ 語言,這是一種以相當露骨的方式命名的語言,它構建在 C 語言之上,創建了一種很好的面向對象語言。不過,許多其它語言的存在是有充分理由的。計算機擅長一致的重複,因此任何可預見的東西都可以構建在程式語言中,對程式設計師來說這意味著更少的工作量。為什麼在 C++ 語言中用一行語句就可以將一個 int 轉換為一個 long 時(long x = long(n);),還要在 C 語言用兩行語句呢?

然而,C 語言在今天仍然有用。

首先,C 語言是一種相當簡約和直接的語言。除了編程的基礎知識之外,並沒有很高級的概念,這很大程度上是因為 C 語言實際上就是現代程式語言的基礎之一。例如,C 語言的特性之一是數組,但是它不提供字典(除非你自己寫一個)。當你學習 C 語言時,你會學習編程的基礎組成部分,它可以幫助你認識到如今的程式語言的改進及其的精心設計。

因為 C 語言是一種最小化的程式語言,你的應用程式很可能會獲得性能上的提升,這在其它許多程式語言中是看不到的。當你考慮你的代碼可以執行多快的時候,很容易陷入錙銖必較的境地,因此,重要的是要問清楚你是否需要為某一特定任務提供更多的速度。與 Python 或 Java 相比,使用 C 語言,你在每行代碼中需要糾結的地方更少。C 語言程序運行很快。這是 Linux 內核使用 C 語言編寫的一個很好的理由。

最後,C 語言很容易入門,特別是,如果你正在運行 Linux,就已經能運行 C 語言代碼了,因為 Linux 系統包含 GNU C 庫(glibc)。為了編寫和構建 C 語言程序,你需要做的全部工作就是安裝一個編譯器,打開一個文本編輯器,開始編碼。

開始學習 C 語言

如果你正在運行 Linux ,你可以使用你的軟體包管理器安裝一個 C 編譯器。在 Fedora 或 RHEL 上:

$ sudo dnf install GCC

在 Debian 及其衍生系統上:

$ sudo apt install build-essential

在 macOS 上,你可以 安裝 Homebrew ,並使用它來安裝 GCC :

$ brew install gcc

在 Windows 上, 你可以使用 MinGW 安裝一套最小的包含 GCC 的 GNU 實用程序集。

在 Linux 或 macOS 上驗證你已經安裝的 GCC:

$ gcc --versiongcc (GCC) x.y.zCopyright (C) 20XX Free Software Foundation, Inc.

在 Windows 上,提供 EXE 文件的完整路徑:

PS> C:\MinGW\bin\gcc.exe --versiongcc.exe (MinGW.org GCC Build-2) x.y.zCopyright (C) 20XX Free Software Foundation, Inc.

C 語法

C 語言不是一種腳本語言。它是一種編譯型語言,這意味著它由 C 編譯器處理來產生一個二進位可執行文件。這不同於腳本語言(如 Bash )或混合型語言(如 Python )。

在 C 語言中,你可以創建函數來執行你希望做到的任務。默認情況下,執行的是一個名為 main 的函數。

這裡是一個使用 C 語言寫的簡單的 「hello world」 程序:

#include <stdio.h>int main() {  printf("Hello world");  return 0;}

第一行包含一個被稱為 stdio.h(標準輸入和輸出)的 頭文件,它基本上是自由使用的、非常初級的 C 語言代碼,你可以在你自己的程序中重複使用它。然後創建了一個由一條基本的輸出語句構成的名為 main 的函數。保存這些文本到一個被稱為 hello.c 的文件中,然後使用 GCC 編譯它:

$ gcc hello.c --output hello

嘗試運行你的 C 語言程序:

$ ./helloHello world$

返回值

這是 Unix 哲學的一部分,一個函數在執行後「返回」一些東西:在成功時不返回任何東西,在失敗時返回其它的一些東西(例如,一個錯誤信息)。這些返回的內容通常使用數字(確切地說是整數)表示:0 表示沒有錯誤,任何大於 0 的數字都表示一些不成功的狀態。

Unix 和 Linux 被設計成在運行成功時保持沉默是很明智的。這是為了讓你在執行一系列命令時,假設沒有任何錯誤或警告會妨礙你的工作,從而可以始終為成功執行做準備。類似地,在 C 語言中的函數在設計上也預期不出現錯誤。

你可以通過一個小的修改,讓你的程序看起來是失敗的,就可以看到這一點:

include <stdio.h>int main() {  printf("Hello world");  return 1;}

編譯它:

$ gcc hello.c --output failer

現在使用一個內置的 Linux 測試方式來運行它。僅在成功時,&& 操作符才會執行一個命令的第二部分。例如:

$ echo "success" && echo "it worked"successit worked

失敗時,|| 測試會執行一個命令的第二部分。

$ ls blah || echo "it did not work"ls: cannot access 'blah': No such file or directoryit did not work

現在,嘗試你的程序,在成功時,它返回 0;而是返回 1:

$ ./failer && echo "it worked"String is: hello

這個程序成功地執行了,但是沒有觸發第二個命令。

變量和類型

在一些語言中,你可以創建變量而不具體指定變量所包含的數據的類型。這些語言如此設計使得解釋器需要對一個變量運行一些測試來視圖發現變量是什麼樣的數據類型。例如,var=1 定義了一個整型數,當你創建一個表達式將 var 與某些東西相加時,Python 知道顯然它是一個整型數。它同樣知道當你連接 hello 和 world 時,單詞 world 是一個字符串。

C 語言不會為你做任何這些識別和調查;你必須自己定義你的變量類型。這裡有幾種變量類型,包括整型(int),字符型(char),浮點型(float),布爾型(boolean)。

你可能也注意到這裡沒有字符串類型。與 Python 和 Java 和 Lua 以及其它的程式語言不同,C 語言沒有字符串類型,而是將字符串看作一個字符數組。

這裡是一些簡單的代碼,它建立了一個 char 數組變量,然後使用 printf 將數組變量和一段簡單的信息列印到你的屏幕上:

#include <stdio.h>int main() {   char var[6] = "hello";   printf("Your string is: %s\r\n",var);}

你可能會注意到,這個代碼示例向一個由五個字母組成的單詞提供了六個字符的空間。這是因為在字符串的結尾有處一個隱藏的終止符,它佔用了數組中的一個字節。你可以通過編譯和執行代碼來運行它:

$ gcc hello.c --output hello$ ./hellohello

函數

和其它的程式語言一樣,C 函數也接受可選的參數。你可以通過定義你希望函數接受的數據類型,來將參數從一個函數傳遞到另一個函數:

#include <stdio.h>int printmsg(char a[]) {   printf("String is: %s\r\n",a);}int main() {   char a[6] = "hello";   printmsg(a);   return 0;}

簡單地將一個函數分解為兩個函數的這種方法並不是非常有用,但是它演示了默認運行 main 函數以及如何在函數之間傳遞數據。

條件語句

在真實的編程中,你通常希望你的代碼根據數據做出判斷。這是使用條件語句完成的,if 語句是其中最基礎的一個語句。

為了使這個示例程序更具動態性,你可以包含 string.h 頭文件,顧名思義,它包含用於檢查字符串的代碼。嘗試使用來自 string.h 文件中的 strlen 函數測試傳遞給 printmsg 函數的字符串是否大於 0:

#include <stdio.h>#include <string.h>int printmsg(char a[]) {  size_t len = strlen(a);  if ( len > 0) {    printf("String is: %s\r\n",a);  }}int main() {   char a[6] = "hello";   printmsg(a);   return 1;}

正如在這個示例中所實現的,該條件永遠都不會是非真的,因為所提供的字符串總是 hello,它的長度總是大於 0。這個不夠認真的重新實現的 echo 命令的最後一點要做是接受來自用戶的輸入。

命令參數

stdio.h 文件包含的代碼在每次程序啟動時提供了兩個參數: 一個是命令中包含多少項的計數(argc),一個是包含每個項的數組(argv)。例如, 假設你發出這個虛構的命令:

$ foo -i bar

argc 是 3,argv 的內容是:

  • argv[0] = foo
  • argv[1] = -i
  • argv[2] = bar

你可以修改示例 C 語言程序來以字符串方式接受 argv[2],而不是默認的 hello 嗎?

命令式程式語言

C 語言是一種命令式程式語言。它不是面向對象的,也沒有類結構。使用 C 語言的經驗可以教你很多關於如何處理數據,以及如何更好地管理你的代碼運行時生成的數據。多使用 C 語言,你最後能夠編寫出其它語言(例如 Python 和 Lua)可以使用的庫。

想要了解更多關於 C 的知識,你需要使用它。在 /usr/include/ 中查找有用的 C 語言頭文件,並且看看你可以做什麼小任務來使 C 語言對你有用。在學習的過程中,使用來自 FreeDOS 的 Jim Hall 編寫的 C 語言忘備錄 。它在一張雙面紙忘備錄上放置了所有的基本要素,所以在你練習時,可以立即訪問 C 語言語法的所有要素。


via: opensource.com

作者: Seth Kenlon 選題: lujun9972 譯者: robsean 校對: wxy

本文由 LCTT 原創編譯, Linux中國 榮譽推出

點擊「了解更多」可訪問文內連結

相關焦點

  • C語言簡單編程速成!保姆級入門教程,目標達成!
    當你學習 C 語言時,你會學習編程的基礎組成部分,它可以幫助你認識到如今的程式語言的改進及其的精心設計。 因為 C 語言是一種最小化的程式語言,你的應用程式很可能會獲得性能上的提升,這在其它許多程式語言中是看不到的。
  • 為什麼要學習「 C」程式語言?
    「 C」編程是另一種程式語言的基本基礎,像java、php,C++等熱門程式語言都是「 C」編程最為底層開發,所以我們通常稱「 C」編程編程「母語」。「 C」編程是一種簡單的語言,可以更快地執行。同樣,「 C」是一種結構化語言,其中的程序分為不同的模塊,每個模塊都可以單獨或相互尋址,從而創建一個單獨的「 C」程序。這種結構使檢查,管理和調試方法變得簡單。「 C」包括32個關鍵字,各種數據類型以及一組非常有效地執行編程的重要內置函數。額外的「 C」編程功能是它可以擴展自身。
  • 為什麼要學習「C」程式語言?
    「 C」編程是另一種程式語言的基本基礎,像java、php,C++等熱門程式語言都是「 C」編程最為底層開發,所以我們通常稱「 C」編程編程「母語」。「 C」編程是一種簡單的語言,可以更快地執行。同樣,「 C」是一種結構化語言,其中的程序分為不同的模塊,每個模塊都可以單獨或相互尋址,從而創建一個單獨的「 C」程序。這種結構使檢查,管理和調試方法變得簡單。
  • 現代程式語言起點,C語言之環境搭建
    C 語言是一種廣泛使用的計算機語言,它與 Java 程式語言一樣普及,二者在現代軟體程式設計師之間都得到廣泛使用。C 語言被廣泛使用,比如:Linux 作業系統和 RDBMS(關係資料庫管理系統) MySQL 都是使用 C 語言編寫的。
  • 三天學會C語言編程 | 中篇
    本文是《三天學會C語言編程》的第二篇文章,承接上一篇《三天學會C語言編程 | 上篇》。本文重點介紹C語言的數據類型、表達式、變量和函數等內容。數據類型C語言中有多種數據類型,這些數據的類型與我們日常生活中的數據的類型有些類似。比如整型數和浮點型數(小數),還有一些我們平時接觸不到的數據類型,如字符串類型(上文中的hello world!
  • C語言編程工具選擇
    一、編程工具計算機處理的數據、接受的指令是二進位數據,用C語言編寫的程序需要轉變成計算機能識別的二進位,才能讓計算機工作,這個轉換過程就是使用編譯器對源程序進行編譯,雖然可以使用命令行的方式編譯源程序,但使用編程工具不僅可以編譯源程序,還可以編寫、調試等,可以簡化編程工作。
  • 未來C程式語言的主要應用到哪些方面?
    C程式語言在大約在50年前發布,今天仍然在所有程式語言中最流行之一。根據TIOBE世界程式語言排名,它在2019年排名第二,甚至在2019年獲得了最佳程式語言稱號。C程式語言是可以直接與電子硬體(例如內核,驅動程序等)開發的,而且,C程式語言是另一種程式語言的基礎,因此,它被稱為所有編程的「母語」。 C程式語言的使用c程式語言是一種非常簡單的語言,通常被全世界的軟體工程師使用。最初,這種語言是用於系統開發,確切地說是構成作業系統的程序。
  • 未來C程式語言的主要應用到哪些方面?
    C程式語言的使用c程式語言是一種非常簡單的語言,通常被全世界的軟體工程師使用。最初,這種語言是用於系統開發,確切地說是構成作業系統的程序。C程式語言的優勢很大程度上可以生成與彙編語言編寫的代碼幾乎一樣快的運行速度。
  • C語言編程習慣心得
    從編程菜鳥一路走來,慢慢對編程習慣有了一個新的認識。因為曾經我寫的代碼的可讀性令自己也感到哭啼皆非,搞得自己暈頭轉向。今天特意來分享一下自己的一些關於編程習慣的心得。很多人以為代碼一敲完,能得到預期的結果,就萬事ok,其實不然。後面的程序調試、維護和升級是一個項目中很重要的一部分,這就要求我們必須規範編程習慣。
  • 那些主流程式語言的知識,C語言
    前言對於程式語言來說,經常看到有因為各自支持的語言陣營而互懟的,其實根本沒那個必要,都只是一種工具而已。當多數主流語言都會使用時也許你就不會有偏見了,本質不過都是用來描述計算機的一個任務,只是每門語言設計時考慮的側重點不一樣而已。
  • 為什麼要把學習C語言作為第一門程式語言?
    編程是向計算機發出指令以執行特定任務或執行指令的行為,目前專業行業和學術界使用數百種程式語言。一個人需要熟悉並且能夠使用至少幾種程式語言進行編程才能作為目前專業開發者的成功。學習編程的最好理由在於它對所有人開放,你不需要大學學位即可通過自學成為專業程式設計師。
  • C語言編程核心要點
    C經驗只有一兩年,C比較簡單,簡單到《The C Programming Language》(C程序設計語言)只有區區的200多頁,相比上千頁的C++大部頭,不得不說真的很人性化了。我教過6個人編程,教過HTML,教過JAVA,也教過C++。最近,我在教我小孩編程,他只有十歲,很多人建議我選擇Python,但我最終選擇了C,因為C簡單且強大,現在看來,好像是個不錯的選擇。
  • 程式設計師學習C語言編程的4種方法,C語言之父的大作不容錯過!
    如果新手要學習編程,一些前輩都會建議從Python、PHP、Java開始學。不過,有些程式設計師是直接從C語言強勢入門編程的。那麼,如何學習C語言呢?下面w3cschool提供4種入門C語言的方法:0、刷題絕大多數的程式設計師學編程的時候,還是會開啟簡單粗暴的刷題模式。刷面試對於面試以及技術的提高大有裨益,刷題網站強推Leetcode、Codility、Lintcode等。1、敲一遍代碼紙上得來終覺淺,絕知此事要躬行。
  • Linux下C編程基礎之:Linux下C語言編程概述
    3.1.1C語言簡單回顧C語言最早是由貝爾實驗室的DennisRitchie為了UNIX的輔助開發而編寫的,它是在B語言的基礎上開發出來的。儘管C語言不是專門針對UNIX作業系統或機器編寫的,但它與UNIX系統的關係十分緊密。
  • 實用C語言編程(第三版)高清PDF
    現在有很多介紹C 語言的著作,但是本書在這一方面的確與眾不同,例如在討論C中運算優先級時, 15種級別被歸納為下面兩條原則:需要的朋友關注後私信我,大量優質電子資料分享!- 先乘除,後加減;- 在所有該加括號的地方都加上括號  第三版除介紹UNIX上的編程工具之外
  • 單片機程序C語言與彙編語言混合編程
    與彙編語言混合編程本文引用地址:http://www.eepw.com.cn/article/201611/322505.htm1.C語言函數和彙編語言函數相互調用在這個示例中C語言函數main()調用彙編語言函數get_rand()以得到一個隨機數;彙編語言函數get_rand()首先調用C語言的標準庫函數rand()得到一個整型隨機值,然後用調用C語言函數mult()的方法把這個隨機值乘以main()函數傳遞給自己的實參,並把乘積值返回給
  • 「C語言C++編程入門」——編譯機制和語言標準
    用 C 語言編寫一個程序時,你將編寫的內容保存在一個被稱為原始碼文件的文本文件中。大多數 的系統,都需要該文件的名稱以 .c 結尾。 例如,hello world.c 。名稱中小點前的部分被稱為基本名,小點後的部分被稱為擴展名。
  • 日常疑惑:編程學Java還是學C語言?
    這兩門程式語言都是IT行業的寵兒,Java與和C語言各自的技術特點、應用方向上有所不同,沒有伯仲之分,所以這也讓初學者們覺得很難選:應該選擇哪個做為入門語言呢?從學習的難易度上來說,java語言比C語言要簡單。
  • 自學編程第1節:程式語言有哪些,什麼關係?彙編C/C++,JAVA簡介
    首先,謝謝大家點擊閱讀獵奇哥的編程系列教程,後期慢慢補充,詳細介紹C語言,C++語言編程的方方面面,儘量幫助大家能夠儘量簡單的學會C++編程核心入門知識。總章節數待定,視內容的更新情況。說起編程,最早的是彙編語言,這種語言大家通常叫做低級語言,做一個程序,需要非常多的指令和代碼,完成的卻是一個非常簡單的功能,程式設計師的工作量非常大,當然,那個時期,電腦的功能也沒有現在的這麼強大,彙編對於當時來說,也是夠用。
  • 編程入門選什麼語言好?C 語言還是Python?為你解析
    這裡又得分情況來說:如果你只是想用編程來完成一些簡單的任務如果你要深入編程,想成為技術專家,那麼選 C 語言。如果你還不清楚自己的未來發展方向,那請先弄清自己想要做什麼再來學編程。如果實在是前路迷茫,懵懂未知,那麼從 C 語言入門。因為你把 C 語言學了,你會發現 Python 入門太簡單了;反之不然。