C語言是什麼

一、C是什麼

C 語言是通用程式語言,1972 年為 UNIX 作業系統誕生,系統本身、配套軟體幾乎全用 C 撰寫;但它並不綁定 UNIX,任何電腦 / 系統都能使用。常被稱作「系統級語言」,既能開發作業系統、編譯器,也能製作各類一般軟體。

C的前身是 B 語言(BCPL),B、BCPL 是無資料型別的語言,C 新增了完整的資料型別體系。

二、核心特性

1)豐富的資料型別

相較於它的前輩B語言,它增加了豐富的資料型別。

基礎型別:字元、多種大小的整數、小數(浮點數)

衍生型別:指標、陣列、結構、聯合體;依靠指標可以直接操作記憶體位址,不受硬體限制

規則:運算子拼接就能組成運算式,賦值、函式呼叫這類運算式都能單獨當作一行程式敘述

2)完整程式流程控制

判斷(if-else)、多分支選擇(switch)、兩種迴圈(while/for 先判斷再執行、do 後判斷再執行)、提前跳出迴圈(break)等等。這些流程控制敘述,可以使得你的程式邏輯變得更加豐富。

3)函式

函式就是一套包裝好的固定操作流程,給它取個名字,想用的時候呼叫名字,它就自動做完一整套事。

舉生活例子:

如果「烤麵包」 是一個函式。

不用每次烤麵包都重複一遍:揉麵團→整型→烤麵包。

只要喊一句 「烤麵包」,整套步驟自動執行,這就等於呼叫函式

當你想烤兩次麵包,只需要呼叫兩次「烤麵包」 這個函式就可以。

如果放到 C 語言裡:

printf 這個函式,包裝了「把文字顯示到畫面上」的全套操作。你只需要寫 printf("你好"),不用自己一步步操控電腦畫面。

函式能回傳數字、結構struct、指標等各類資料

支援遞迴呼叫(自己呼叫自己) 函式內的區域變數每次呼叫都會重新建立;函式不能巢狀定義,但變數可以在程式區塊內單獨宣告

專案程式碼可以拆分到多個.c檔案分開編譯;

變數分三種作用域:僅函式內部、單一檔案內全域、整個程式全部可見

4 前置處理器

程式編譯前會先執行前置處理:批量取代文字巨集、匯入其他程式檔、選擇性編譯部分程式碼。

所謂前置處理,就是編譯器提前對一些不屬於語言本體的內容做預先處理,處理完才會執行編譯;為什麼有些內容不屬於語言本身?因為要方便程式設計師開發、提升開發效率,很多功能可以使用巨集實現。等後續我們學到相關章節,大家就會理解了

三、偏向底層的精簡語言

這裡說的底層不是貶義,它只處理電腦原生的基礎資料:字元、數字、記憶體位址,直接使用硬體自帶的運算邏輯,執行效率極高。

也就是說,它可以處理電腦更底層的內容;相較其他語言,C語言能夠操作記憶體位址,甚至操控硬體。

語言本身功能極簡,複雜能力依賴函式庫實現

C 語言原生沒有內建字串、陣列、集合、檔案讀寫、輸入輸出功能:

無法一次性直接操作整個字串 / 陣列;只有結構允許整體複製

沒有自動記憶體管理、垃圾回收機制,記憶體需要手動控制

沒有read/write讀寫關鍵字,列印、讀取輸入全都要呼叫函式庫

只支援單執行緒基礎流程,不原生支援並行、同步、協同程式能力

所謂函式庫,就是其他人用C語言或其他語言寫好的函式集合。你可以呼叫這些函式庫來完成各種功能,不用重複開發基礎功能。

雖然很多功能需要手動呼叫函式,但語言本身體積小、規則簡單,容易學習,開發者可以完整吃透整套語法。

四、 C 語言標準化:ANSI C(1988)

所謂標準化,一開始使用C語言的人與公司眾多,各家都有自己的定義,導致規格無法統一;為了建立統一規範,由專責機構制定標準,所有開發者都依循同一套規則。就像我們的USB傳輸介面、插座規格一樣,都有專責單位統一規範。

ANSI = American National Standards Institute

解析

全名為美國國家標準協會,它是美國民間標準化組織,不生產軟體、不撰寫程式,專門為各行各業制定統一規範(工業、電子、電腦、程式語言標準都歸其管)

什麼是 ANSI C?

1983 年,ANSI 專門成立小組統一規範 C 語言語法,1988 年正式發布第一套C語言官方標準,這套標準就稱為 ANSI C(也叫 C89)。

五、 ANSI 標準配套:標準函式庫

新增一套統一標準函式庫,提供檔案讀寫、格式化輸入輸出、記憶體配置、字串處理等通用功能,搭配統一標頭檔使用。

C 語言語法本身非常精簡,只提供變數、判斷、迴圈、函式、指標這類基礎程式規則,沒有原生內建列印文字、讀取鍵盤、讀寫檔案、數學運算、字串處理的功能

ANSI C 配套規定了一套全世界編譯器統一、跨系統通用的工具函式集合,這就是標準函式庫

呼叫方式:通常使用 #include xxx.h 匯入標頭檔,就能直接使用函式庫內的函式。

例如:

#include <stdio.h> //輸入輸出函式庫,提供 printf(列印)、scanf(讀取輸入)
#include <stdlib.h> //記憶體配置、程式結束、亂數產生
#include <string.h> //字串複製、比對
#include <math.h> //sin、sqrt 等數學運算Code language: HTML, XML (xml)

在 ANSI 標準出現前: UNIX 的列印函式、Windows 的列印函式寫法互不相同,程式碼切換系統執行就會報錯。標準函式庫推出之後,只要你寫 printf("hello"),Windows / Linux / Mac 全都通用,不用修改程式碼。這大幅降低開發者負擔,同時也推動了C語言的普及發展。

標準函式庫是用什麼開發的?

多數功能:是以 C 語言實作,當然也有少部分搭配組合語言等

像是字串複製 strcpy、數學運算、記憶體複製這類不會直接操作硬體的函式,幾乎全部以純 C 程式碼撰寫。

有一部分操作需要和作業系統、硬體互動,單純C語言無法實現,必須搭配其他語言,最常見的就是組合語言。

六、可攜性與型別安全

同一套程式碼,只需小幅修改甚至完全不用調整,就能拿到不同作業系統下編譯,編譯完成後的執行檔即可在該系統執行。

讀到這裡,相信大家對C語言已經有基礎認識;如果還是不太理解也不用擔心,單純透過文字描述確實不容易吸收,後續我們會透過實例逐步深入,屆時就能完全看懂上面的內容。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *