1. 程式人生 > >《C程序設計語言》筆記 (九) 參考手冊1

《C程序設計語言》筆記 (九) 參考手冊1

entry struct 表示 種類 制表符 對象 回車 都是 說明

A.1 引言

A.2 詞法規則

程序由存儲在文件中的一個或多個翻譯單元組成

程序的翻譯分幾個階段完成

翻譯的第一階段完成低級的詞法轉換

執行以字符#開頭的行中的指令,並進行宏定義和宏擴展

在預處理完成後,程序被規約成一個記號序列

記號

C語言中共有6類記號:

標識符

關鍵字

常量

字符串字面量

運算符

其他分隔符

空格 橫向制表符和縱向制表符 換行符 換頁符 和註釋在程序中僅用來分隔記號 因此被忽略

相鄰的標識符 關鍵字和常量之間需要用空白符分隔

如果到某一字符為止的輸入留被分隔成若幹記號

那麽下一個記號就是後續字符序列中可能構成記號的最長字符串

註釋

註釋以字符/*開始 以 */結束

註釋不能夠嵌套,也不能出現在字符串字面量或字符字面量中

標識符

標識符是由字母和數字組成

第一個字符必須是字母,下劃線也被看成是字母

大寫字母和小寫字母是不同的

標識符可以為任意長度

對應內部標識符來說,至少前31個字母是有效的

內部標識符包括預處理器的宏名和其他所有沒有外部鏈接的名字

帶有外部鏈接的標識符限制更嚴格一些,實現可能是認為這些標識符的前6個字符有效,而且可能忽略大小寫

  

關鍵字

下列標識符被保留作為關鍵字,不能用於其他用途

auto double int struct

break else long switch

case enum register typedef

char extern return union

conse float short unsigned

continue for signed void

default togo sizeof volatile

do if static while

某些實現還把fortran和asm保留為關鍵字


關鍵字const signed  和volatile是ANSI標準新增加的

enum和void是第一版後增加的

entry曾經是保留字,但未被使用,現在已經不是了

  

常量

常量有多種類型。

每種類型的常量都有一個數據類型

常量:

整型常量

字符常量

浮點常量

枚舉常量


1.整型常量

由一串數字組成

如果它以數字0開頭,則為8進制,否則為10進制

八進制常量不包含8 和9 

以0x或0X開頭的數字為16進制,16進制包含a(A)到f(F) 的字母

整型常量若以u或U為後綴,表示一個無符號數

若以l或L後綴,表示一個長整型

若以UL為後綴,表示一個無符號長整型

2.字符常量

字符常量是用單引號引起來的一個或多個字符構成的序列,如‘x‘

字符常量的值是執行時機器字符集中此字符對應的數值,多字符常量的值由具體實現定義

字符常量不包括字符‘和換行符

可以使用以下轉義字符序列表示這些字符以及其他一些字符

換行符 \n

橫向制表符 \t

縱向制表符 \v

回退符 \b

回車符 \r

換頁符 \f

響鈴符 \a

反斜杠 問號  \?

單引號 \‘

雙引號 \"

八進制數 \000

十六進制數  \xhh

轉義序列\000由反斜杠後跟1~3個八進制數值組成 這些八進制用來指定所期望的字符值

\0便是一個常見的例子,表示字符NULL

轉義序列\xhh 反斜杠後面緊跟x以及十六進制數值,表示所期望的字符值

數字的個數沒有限制,但如果字符值超過最大的字符值,該行為是未定義的

3.浮點常量

由整數 小數點 小數 一個e(E) 一個可以選的帶符號整型類型的指數和一個可選的表示類型後綴(F f L l)的組成

整數和小數均由數字序列組成

可以沒有整數或小數部分(但不能兩者都麽有)

還可以沒有小數點或者e和指數部分(但不能兩者都沒有)

浮點常量的類型由後綴確定

F(f)表示float類型

L(l) 表示long double類型 沒有後綴表示double類型

  

字符串字面值

字符串字面量也稱為字符串常量

是用雙引號引起來的一個字符序列

字符串的類型為"字符數組",存儲類為static

它使用給定的字符進行初始化

對相同的字符串字面值是否進行區分取決於具體實現

如果程序試圖修改字符串字面值,則行為是未定義的

我們可以把相鄰的字符串字面值連接為一個單一的字符串

執行任何連接操作後,都將在字符串的後面增加一個空字符\0

這樣掃描字符串的程序便可以找到字符串的結束位置

字符串字面值不包括換行符和雙引號字符

但可以用與字符常量相同的轉義字符序列表示

A.3 語法符號

在手冊用到的語法符號中,語法類別用楷體及斜體表示

文字和字符以打字型字體表示

多個候選的類別通常在不同的行中

但在一些情況下,一組字符長度較短的候選項可以放在一行,並以短語 one of標識

可選的終結符或非終結符帶有下標  opt

{表達式 opt}

表示一個括在花括號中的表達式是可選的

  

A.4 標識符的含義

標識符也稱為名字

可以指代多種實體 

函數

結構標記

聯合標記

枚舉標記

結構成員或聯合成員

枚舉常量

類型定義名

標號以及對象等

對象有時也稱為變量,它是一個存儲位置

對它的解釋依賴兩個主要屬性

存儲類和類型

存儲類決定了與該標識對象相關聯的存儲區的生存期

類型決定了對象中值的含義

名字還具有一個作用域和一個連接

作用域即程序中可以訪問此名字的區域

連接決定另一作用域中的同一名字是否指向同一個對象

  

存儲類

存儲類分為兩類:

自動存儲類

靜態存儲類

聲明對象時使用的一些關鍵字和聲明的上下文共同決定了對象的存儲類

自動存儲類對象對於一個程序塊來說是局部的,在退出程序時對象消失

如果沒有使用存儲類說明符 或者使用了auto限定符

則程序塊中的聲明生成的都是自動存儲對象

聲明為register的對象也是自動存儲對象,並且將被存儲在機器的快速寄存器中

靜態對象可以是某個程序的局部對象,也可以是所以程序塊的外部對象

無論是哪一種情況 在退出和再次進入函數或程序塊是其值將保持不變

在一個程序塊中,靜態對象使用關鍵字static聲明

在所有程序塊的外部聲明且與函數定義在同一級的對象總是靜態的

可以通過static關鍵字將對象聲明為某個特定翻譯單元的局部對象

這種類型的對象將具有內部鏈接

當省略顯式的存儲類或通過關鍵字external進行聲明時,對象度整個程序來說是全局訪問的,並且具有外部鏈接

  

基本類型

派生類型

類型限定符

A.5 對象和左值

A.6 轉換

整型提升

整型轉換

整數和浮點數

浮點類型

算術類型轉換

指針和整數

void

指向void的指針

《C程序設計語言》筆記 (九) 參考手冊1