當前位置:首頁 » 編程語言 » c語言維基

c語言維基

發布時間: 2024-11-07 21:59:49

① C程序的最小單位是

token - c語言中不可分割的最小部分 [ 中文譯名單詞 ]

意味著中加不能添加空白字元 否則含義改變

詳細見編譯

詞法分析樹

網頁鏈接// 網路的

網頁鏈接// 維基的

② c語言的發展史

C語言,是一種通用的、過程式的編程語言,廣泛用於系統與應用軟體的開發。具有高效、靈活、功能豐富、表達力強和較高的移植性等特點,在程序員中備受青睞。

C語言是由UNIX的研製者丹尼斯·里奇(Dennis Ritchie)於1970年 由 肯·湯普遜(Ken Thompson)所研製出的B語言的基礎上發展和完善起來的。目前,C語言編譯器普遍存在於各種不同的操作系統中,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C語言的設計影響了許多後來的編程語言,例如C++、Objective-C、Java、C#等。

後來於1980年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局(American National Standard Institution)為C語言訂定了一套完整的國際標准語法,稱為ANSI C,作為C語言的標准。1980年代至今的有關程序開發工具,一般都支持符合ANSI C的語法。

C語言是一個程序語言,設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。C語言也很適合搭配匯編語言來使用。盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。

早期發展
C語言最早是由丹尼斯·里奇為了在PDP-11電腦上運行的UNIX系統所設計出來的編程語言,第一次發展在1969年到1973年之間。之所以被稱為「C」是因為C語言的很多特性是由一種更早的被稱為B語言的編程語言中發展而來。早期操作系統的核心大多由匯編語言組成,隨著C語言的發展,C語言已經可以用來編寫操作系統的核心。1973年,Unix操作系統的核心正式用C語言改寫,這是C語言第一次應用在操作系統的核心編寫上。
K&R C
1978年,丹尼斯·里奇(Dennis Ritchie)和布萊恩·柯林漢(Brian Kernighan)合作出版了《C程序設計語言》的第一版。書中介紹的C語言標准也被C語言程序員稱作「K&R C」,第二版的書中也包含了一些ANSI C的標准。K&R C主要介紹了以下特色:

結構(struct)類型
長整數(long int)類型
無符號整數(unsigned int)類型
把運算符=+和=-改為+=和-=。因為=+和=-會使得編譯器不知道用戶要處理i = -10還是i =- 10,使得處理上產生混淆。
即使在後來ANSI C標准被提出的許多年後,K&R C仍然是許多編譯器的最低標准要求,許多老舊的編譯仍然運行K&R C的標准。
ANSI C 和 ISO C
1989年,C語言被 ANSI 標准化(ANSI X3.159-1989)。標准化的一個目的是擴展K&R C。這個標准包括了一些新特性。在K&R出版後,一些新特性被非官方地加到C語言中。

void 函數
函數返回 struct 或 union 類型
void * 數據類型
在ANSI標准化自己的過程中,一些新的特性被加了進去。ANSI也規定了一套標准函數庫。ANSI ISO(國際標准化組織)成立 ISO/IEC JTC1/SC22/WG14 工作組,來規定國際標準的C語言。通過對ANSI標準的少量修改,最終通過了 ISO 9899:1990。隨後,ISO標准被 ANSI 採納。

傳統C語言到ANSI/ISO標准C語言的改進包括:

增加了真正的標准庫
新的預處理命令與特性
函數原型允許在函數申明中指定參數類型
一些新的關鍵字,包括 const、volatile 與 signed
寬字元、寬字元串與位元組多字元
對約定規則、聲明和類型檢查的許多小改動與澄清
WG14工作小組之後又於1995年,對1985年頒布的標准做了兩處技術修訂(缺陷修復)和一個補充(擴展)。下面是 1995 年做出的所有修改:

3 個新的標准庫頭文件 iso646.h、wctype.h 和 wchar.h
幾個新的記號與預定義宏,用於對國際化提供更好的支持
printf/sprintf 函數一系列新的格式代碼
大量的函數和一些類型與常量,用於多位元組字元和寬位元組字元

C99在ANSI的標准確立後,C語言的規范在一段時間內沒有大的變動,然而C++在自己的標准化創建過程中繼續發展壯大。《標准修正案一》在1995年為C語言創建了一個新標准,但是只修正了一些C89標准中的細節和增加更多更廣的國際字元集支持。不過,這個標准引出了1999年ISO 9899:1999的發表。它通常被稱為C99。C99被ANSI於2000年3月採用。

在C99中包括的特性有:

增加了對編譯器的限制,比如源程序每行要求至少支持到 4095 位元組,變數名函數名的要求支持到 63 位元組(extern 要求支持到 31)。
增強了預處理功能。例如:
宏支持取可變參數 #define Macro(...) __VA_ARGS__
使用宏的時候,允許省略參數,被省略的參數會被擴展成空串。
支持 // 開頭的單行注釋(這個特性實際上在C89的很多編譯器上已經被支持了)
增加了新關鍵字 restrict, inline, _Complex, _Imaginary, _Bool
支持 long long, long double _Complex, float _Complex 等類型
支持不定長的數組,即數組長度可以在運行時決定,比如利用變數作為數組長度。聲明時使用 int a[var] 的形式。不過考慮到效率和實現,不定長數組不能用在全局,或 struct 與 union 里。
變數聲明不必放在語句塊的開頭,for 語句提倡寫成 for(int i=0;i<100;++i) 的形式,即i 只在 for 語句塊內部有效。
允許採用(type_name){xx,xx,xx} 類似於 C++ 的構造函數的形式構造匿名的結構體。
初始化結構的時候允許對特定的元素賦值,形式為:
struct {int a[3],b;} foo[] = { [0].a = {1}, [1].a = 2 };
struct {int a, b, c, d;} foo = { .a = 1, .c = 3, 4, .b = 5} // 3,4 是對 .c,.d 賦值的
格式化字元串中,利用 \u 支持 unicode 的字元。
支持 16 進制的浮點數的描述。
printf scanf 的格式化串增加了對 long long int 類型的支持。
浮點數的內部數據描述支持了新標准,可以使用 #pragma 編譯器指令指定。
除了已有的 __line__ __file__ 以外,增加了 __func__ 得到當前的函數名。
允許編譯器化簡非常數的表達式。
修改了 / % 處理負數時的定義,這樣可以給出明確的結果,例如在C89中-22 / 7 = -3, -22 % 7 = -1 ,也可以-22 / 7= -4, -22 % 7 = 6。 而C99中明確為 -22 / 7 = -3, -22 % 7 = -1,只有一種結果。
取消了函數返回類型默認為 int 的規定。
允許 struct 定義的最後一個數組不指定其長度,寫做 [] 。
const const int i 將被當作 const int i 處理。
增加和修改了一些標准頭文件,比如定義 bool 的 <stdbool.h> ,定義一些標准長度的 int 的 <inttypes.h> ,定義復數的 <complex.h> ,定義寬字元的 <wctype.h> ,類似於泛型的數學函數 <tgmath.h>, 浮點數相關的 <fenv.h>。 在<stdarg.h> 增加了 va_ 用於復制 ... 的參數。<time.h> 里增加了 struct tmx ,對 struct tm 做了擴展。
輸入輸出對寬字元以及長整數等做了相應的支持。

③ C語言:C語言保留字(關鍵字)

保留字,亦稱為關鍵字,是高級語言中已定義的字,程序員不能將其作為變數名或過程名使用。每種編程語言都有其特定的保留字集合。例如,BASIC語言中禁止使用「LIST」作為變數名或過程名,因為「LIST」是用於顯示內存程序命令的BASIC語言專用命令。C語言有32個關鍵字,C++則有63個,JAVA則有48個(根據維基網路數據)。C89標准中,類型說明保留字包括:int, long, short, float, double, char, unsigned, signed, const, void, volatile, enum, struct, union。語句定義保留字包括:if, else, goto, switch, case, do, while, for, continue, break, return, default, typedef。存儲類說明保留字包括:auto, register, extern, static。長度運算符保留字包括:sizeof。具體含義見下文。

以下為容易出錯的關鍵字,包括:return, void, const, break, continue。

1. return:用於結束函數並返回其後表達式中的值。初學者可能不明白main函數中return 0的意義,忘記添加return語句。然而,return 0表示程序正常退出,返回值傳遞給激活程序(如操作系統)。若未添加return語句,C99標准規定編譯器會自動添加return 0,表示正常退出。因此,為了代碼規范,應添加return 0;具體操作為return(表達式);括弧通常不可省略,除非返回值為表達式,以避免混淆。返回值類型通常與函數定義類型一致,如果返回值類型與函數定義類型不一致,以函數定義類型為准。

2. void:void表示空類型,void *表示空類型指針。定義void a是不允許的,因為系統無法確定其分配空間大小。然而,定義void *p是允許的,因為這是一個指針變數,系統默認分配四個位元組空間。在操作時,需要將void指針強制轉換為特定類型指針後才能進行操作。

3. const:const表示不變,用於修飾變數,使其不可改變。const定義的變數稱為只讀變數。例如,int const m = 10;int const m = 10;兩者等價。然而,只讀變數值雖不可改變,但仍是變數,而非常量。例如,int const M = 10;int a[M];定義數組錯誤,因為數組元素個數必須為常量,而M本質上為變數。通常,定義數組使用int a[M] = {};避免錯誤。

4. break, continue:break用於退出當前循環,continue用於跳過當次循環(不執行continue後面的語句,但下次循環還會執行)。break可用於switch語句,而continue不可用於switch語句。

總結,正確理解和使用保留字對於編程至關重要。希望上述內容對理解C語言保留字有所幫助。

熱點內容
安通加密 發布:2024-11-08 00:25:51 瀏覽:138
為什麼安卓和蘋果單核差距那麼大 發布:2024-11-08 00:25:50 瀏覽:438
存儲器的種類 發布:2024-11-08 00:14:10 瀏覽:188
戴爾伺服器bios怎麼看日誌 發布:2024-11-08 00:09:56 瀏覽:961
有漁編程下載 發布:2024-11-07 23:56:49 瀏覽:714
漢字在計算機內部存儲 發布:2024-11-07 23:55:20 瀏覽:714
java啟動jar 發布:2024-11-07 23:49:19 瀏覽:607
java方法的參數傳遞參數 發布:2024-11-07 23:37:12 瀏覽:445
安卓手機為什麼一直停在開機畫面 發布:2024-11-07 23:36:16 瀏覽:650
java是一種面向對象的語言 發布:2024-11-07 23:21:53 瀏覽:981