C語言基本概念

 

計算機語言與人類語言一樣,都是一種交流的工具。人類語言是人與人之間交流的工具,計算機語言是人與計算機之間交流的工具。所有語言的都有它的語法、語素和語用;都有它的語法規則,這樣才能被交流的雙方相互理解;計算機語言也不例外,我們編寫的計算機程序也必須遵守一定的語法規則,才能被編譯器所識別,最後翻譯成能被CPU理解執行的機器語言,其中機器語言是CPU廠商設計的。

1.   計算機語言相關概念解釋

①    編譯程序:編譯程序又稱爲編譯器,是一個語言翻譯程序,它把源語言翻譯成目標語言。源語言主要指各種計算機語言,目標語言主要指CPU能識別的機器碼。例如英語翻譯成漢語的過程中,翻譯官相當於編譯器。

②    編譯:編譯源語言,生成目標代碼並形成機器碼的過程,相當於現實翻譯中的筆譯。C語言屬編譯型語言。

③    解釋:邊把源語言解釋成機器碼邊執行的過程,相當於現實翻譯中的口譯。Shell腳本屬解釋型語言。

④    編譯階段:編譯階段包括詞法分析、語法分析、語義分析、中間代碼生成、代碼優化、目標代碼生成六個階段,貫穿始終的功能模塊有表格管理和出錯管理。

⑤    爲什麼需要編譯程序:就象我們母語是漢語,想與一個埃及人交流一樣,但我們不懂埃及語,如果有一個自動語言翻譯機(或翻譯官),雙方的交流才能變得流暢。由於CPU指令是二進制指令,人們難以在此基礎上進行有效編程,所以發明了各種各樣的計算機高級語言,然後通過編譯器把人們編寫的計算機高級語言程序翻譯成CPU能理解的二進制指令。

⑥    程序:通常指的是人們編寫的計算機語言源代碼和編譯後的執行碼,其中源代碼稱爲源程序,執行碼稱爲執行程序,程序是靜態的。程序相當於一個企業行政部門出臺的行政管理文件。

⑦    進程:程序的一次執行過程,進程是動態的。進程相當於企業各部門拿着行政管理文件的執行過程。

⑧    CPU:CPU主要與內存通信,其主要功能有解釋指令、存數據到內存、從內存取數據、數據計算和中斷處理,CPU最突出的功能爲解釋指令和數據計算。CPU的工作是從內存中取出指令並完成指令的自動化執行。

⑨    內存:內存是存放電腦工作數據的空間,斷電後數據丟失。內存的最小單位爲字節,內存每一個最小單位空間都有其編號(即內存地址),CPU是通過內存地址訪問內存數據。在內存看來,內存裏存放的數據都是平等的,都是一串串二進制字符,沒有類型,也沒有含義,是計算機程序把內存的數據賦予特別的類型和意義。

⑩    變量:一段內存空間的抽象,變量類型決定了變量存放內存空間的大小。計算機語言編譯成機器碼後,變量相對於內存的操作就轉變爲對相應內存地址的存取操作。直接存取是一般變量,間接存取是指針變量。C語言變量原則爲先定義,後使用。

⑪    機器程序:經過編譯器編譯後形成CPU能理解的機器指令。在機器程序中,只有內存地址,沒有變量概念;機器程序中所有變量失去意義,變量的操作都會轉換成對內存地址的存取操作。機器程序有如下幾種類型的操作:CPU的計算操作、內存空間的申請與釋放、CPU把寄存器數據存到內存、取內存數據到CPU寄存器、內存數據從一片空間複製到另一片空間、中斷操作等。

⑫    Linux系統編譯方法:gcc(或cc) a.c(源代碼名稱) -o  a(執行碼)。在這裏a.c和a都是程序,其中a.c爲源程序,a爲可執行程序。在界面上輸入 ./a,a就開始了執行之旅,其執行過程稱爲進程。

2.   C語言數據類型種類

圖4-1畫出了C語言數據類型種類,在C語言中只允許使用下面這些數據類型。

圖4-1  C語言數據類型種類

3.  32個關鍵字

C語言有如下32個關鍵字,這些關鍵字由系統定義,不能重新作爲其他定義。

auto   break   case     char  const   continue   default  do    double else   enum   extern   float    for    goto   int   long  register return  short  signed   sizeof   static  struct  switch  typedef  unsigned  union   void    volatile    while

4. 9種控制語句

C語言控制語句的功能是完成程序流程的控制,C語言有如下9種控制語句。

①    if( )-else(條件語句)

②    for( )(循環語句)

③    while( )(循環語句)

④    do-while( )(循環語句)

⑤    continue(結束本次循環開始下一次循環語句)

⑥    break(跳出switch或循環語句)

⑦    switch(多分支選擇語句)

⑧    goto(跳轉語句)

⑨    return(從函數返回語句)

5.  C程序格式和結構特點

C語言習慣用小寫字母,大小寫敏感;不使用行號,無程序行概念;可使用空行和空格;常用鋸齒形書寫格式。

下面以一個實例說明C語言結構特點。

/* example1.1   The  first  C  Program*/           註釋

#include <stdio.h>          編譯預處理

main()          函數

{

        printf(“Hello,World!”);         語句

}

C語言由函數、語句和註釋三個部分組成,這三部分的說明和要求如下。

(1)函數與主函數

一個C語言源程序可以由一個或多個源文件組成。每個源文件可由一個或多個函數組成。一個源程序不論由多少個文件組成,都有一個且只能有一個main函數,即主函數。

源程序中可以有預處理命令(include命令僅爲其中的一種),預處理命令通常應放在源文件頭。

每一個說明,每一個語句都必須以分號結尾。但預處理命令,函數頭和花括號“}”之後不能加分號。

標識符、關鍵字之間必須至少加一個空格以示間隔,若已有明顯的間隔符,也可不再加空格來間隔。

(2)程序語句

C程序由語句組成,用“;”作爲語句終止符。

{}表示一個語句的整體。if、for、while包含多條語句時需要用{}括起來表示一個整體,單條語句則可直接用“;”表示語句終止。

(3)註釋

/*  */爲註釋,不能嵌套,註釋不產生編譯代碼。

6.  C語言程序的開發過程

編輯       編譯(預編譯、編譯、鏈接)      形成執行碼      執行

7.  書寫C語言程序時應遵循的規則

一個說明或一個語句應該佔一行。

用{}括起來的部分,通常表示了程序的某一層次結構。{}一般與該結構語句的第一個字母對齊,並單獨佔一行。

使用縮進方式編程,低一層次的語句比高一層次的語句縮進若干空格後書寫,以便看起來更加清晰,增加程序的可讀性。

有足夠的註釋。有合適的空行。

8.  C語言的字符集

字符是組成語言的最基本的元素。C語言字符集由字母、數字、空格、標點和特殊字符組成。在字符串和註釋中還可以使用漢字或其他可表示的圖形符號。

 (1)字母

小寫字母a~z共26個,大寫字母A~Z共26個。

 (2)數字

0~9共10個。

 (3)空白符

空格符、製表符、換行符等統稱爲空白符,空白符只在字符常量和字符串中起作用。在其他地方出現時,只起間隔作用,編譯程序對它們忽略不計。在程序中適當的地方使用空白符將增加程序的清晰性和可讀性。

(4)標點和特殊字符

包括“,”、“;”等標點和“[”、“]”、“*”等特殊字符。

9.  C語言詞彙

在C語言中使用的詞彙分爲六類,分別爲標識符、關鍵字、運算符、分隔符、常量和註釋符,具體說明如下。

(1)標識符

在程序中使用的常量名、變量名、函數名等統稱爲標識符。除庫函數的函數名由系統定義外,其餘都由用戶自定義。C規定,標識符只能是字母(A~Z,a~z)、數字(0~9)、下畫線(_)組成的字符串,並且其第一個字符必須是字母或下畫線。

a、x、x3、BOOK_1、sum5這5個標識符是合法的標識符。

 以下標識符是非法的:

    3s      以數字開頭。

    s*T     出現非法字符*。

(2)關鍵字

關鍵字是由C語言規定的具有特定意義的字符串,通常也稱爲保留字,用戶定義的標識符不應與關鍵字相同。C語言的關鍵字分爲以下幾類:

①    類型說明符

用於定義、說明變量、函數或其他數據結構的類型,如int、double等。

②    語句定義符

用於表示一個語句的功能,如if~else就是條件語句的語句定義符。

③    預處理命令字

用於表示一個預處理命令,如include。

(3)運算符

C語言中含有相當豐富的運算符。運算符與變量,函數一起組成表達式,表示各種運算功能。運算符由一個或多個字符組成。

(4)分隔符

在C語言中採用的分隔符有逗號和空格兩種。逗號主要用在類型說明和函數多個形參中分隔各個變量,空格多用於語句各單詞之間作間隔符。

(5)常量

C語言中使用的常量可分爲數字常量、字符常量、字符串常量、符號常量、轉義字符等多種。  

(6)註釋符

C語言的註釋符是以“/*”開頭並以“*/”結尾的串,在“/*”和“*/”之間的即爲註釋。程序編譯時,不對註釋作任何處理,註釋可出現在程序中的任何位置,註釋是用來向用戶提示或解釋程序的意義。

10.C語言算法

    C語言是結構化設計語言,結構化程序的靈魂是算法。瑞士Niklaus Wirth教授在20世紀60年代提出了“數據結構+算法=程序”的公式。做任何事情都有一定的步驟,爲解決一個問題而採取的方法和步驟,就稱爲算法。算法具有有窮性、確定性、有零個或多個輸入、有一個或多個輸出、有效性等特徵。C語言算法是通過結構化設計方法來實現,其特點爲自頂向下、逐步細化、模塊化設計和結構化編碼。

11. C語言編譯過程

圖4-2畫出了C語言的編譯流程。

圖4-2 C語言編譯過程

12. 計算機語言說明

數學是描述大自然的語言,會計是人們記錄商業活動的語言,人類語言(英語、漢語、法語、西班牙語等)則是人與人之間交流的語言,計算機語言是人們和計算機(CPU)交流的語言。

由於CPU只能理解機器語言(CPU指令集),而人們對機器語言(一串二進制數)很難閱讀和調式,於是就產生了彙編語言。彙編語言的特點是利用助記符代替相應的機器語言二進制指令,如利用“ADD”助記符代替二進制指令“1000001100000110”,彙編語言較機器語言更有利於人們編程,人們編寫的彙編源程序再經彙編編譯器翻譯成機器語言程序(執行碼),執行碼就是CPU能理解的二進制指令。

由於彙編語言是面向機器的低級語言,與CPU的指令集息息相關,是按CPU的“思考”方式編寫而成的計算機語言。彙編語言與人類思考方法相差較大,於是產生了面向過程的語言(PASCLE、C等)和麪向對象的語言(C++、JAVA等)。但是計算機只能理解機器語言(CPU指令集),人們編寫的C語言、C++語言、JAVA語言源程序要翻譯成機器語言CPU才能夠執行,執行翻譯工作的是編譯程序。就這樣是一門新的計算機學科(編譯原理)產生了,編譯原理介紹了編譯程序的實現方法。masm是彙編的編譯程序,gcc是Linux下C語言和C++語言的編譯程序,JVC是JAVA的編譯程序。

萬物皆流,萬物歸宗。計算機源程序,無論是高級語言C、C++、JAVA源程序,還是彙編語言源程序,最終都要翻譯成機器語言,CPU才能夠執行。

 

摘錄自《深入淺出Linux工具與編程》
發佈了47 篇原創文章 · 獲贊 61 · 訪問量 44萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章