C 语言简单编程速成
為什么你應該學習 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 --version
gcc (GCC) x.y.z
Copyright (C) 20XX Free Software Foundation, Inc.
在 Windows 上,提供 EXE 文件的完整路徑:
PS> C:MinGWingcc.exe --version
gcc.exe (MinGW.org GCC Build-2) x.y.z
Copyright (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 語言程序:
$ ./hello
Hello 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"
success
it worked
在失敗時,||測試會執行一個命令的第二部分。
$ ls blah || echo "it did not work"
ls: cannot access 'blah': No such file or directory
it 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
",var);
}
你可能會注意到,這個代碼示例向一個由五個字母組成的單詞提供了六個字符的空間。這是因為在字符串的結尾有處一個隱藏的終止符,它占用了數組中的一個字節。你可以通過編譯和執行代碼來運行它:
$ gcc hello.c --output hello
$ ./hello
hello
函數
和其它的編程語言一樣,C 函數也接受可選的參數。你可以通過定義你希望函數接受的數據類型,來將參數從一個函數傳遞到另一個函數:
#include <stdio.h>
int printmsg(char a[]) {
printf("String is: %s
",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
",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 語言語法的所有要素。
總結
以上是生活随笔為你收集整理的C 语言简单编程速成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS 7.x安装部署Memcac
- 下一篇: echarts定时加载动画数据