第一章詞法陷阱

2021-06-21 16:11:54 字數 1327 閱讀 2374

一些基本概念:

符號:程式的乙個基本組成單元,作用相當於句子中的單詞,是程式的基本資訊單元 。

字串行:由符號組成,在不同的語境中可能會有不同的含義。

詞法分析器:編譯器中將程式分解為符號的部分。

1.

if(x > big) big = x;

/*1*/

//這裡的符號依次是關鍵字"if"、"("、"x"、">"、"big",")"依次類推,

//符號間的空白(空格、製表符、換行)會被忽略。例子如下:

if (

x >

big) big

= x;

2. 詞法分析採用貪心法(每個符號包含盡可能多的字元)

編譯器將程式分解為符號的過程:從左到右,乙個乙個字元地讀,如果該字元可能組成乙個符號,則繼續讀入下乙個字元,判斷已讀入的兩字元是否可能組成乙個符號,如果可以的話,按照以上規則,繼續往下讀,不可以的話就終止;

除了字串與字元常量, 符號之間不可以有空白(空格、製表符、回車),例項如下:

int a = 1, b = 2; 

cout << a---b << endl;//-1

a = 1, b = 2;

cout << a-- -b << endl;//-1

a = 1, b = 2;

cout << a- --b << endl;//0

3.

int x = 0, y = 0, *p = &x;

y = x/*p; /*p指向除數*/ /*這裡的"/*"被譯為注釋的開始*/

//正確寫法:

y = x / *p; /**p指向除數*/

y = x / (*p);

/*這種問題叫做準二義性問題*/

4.

int a = 0; a =+ 1;//這裡a = 1,相當於 a += 1;

5. 單引號引起的字元實際上代表的是乙個整數,整數值對應於該字元在編譯器中採用的字符集的序列值; 

雙引號引起的字串,代表的是指向無名陣列起始字元的指標 ,該陣列被雙引號間的字串以及'\0'初始化

例子如下: 

printf("hello world!\n");

char hello = ;

printf(hello);

//雙引號引起的字元代表指標,單引號引起的字元代表的是乙個整數

char *s = 'a'; //編譯錯誤,因為'a'不是指標

C陷阱與缺陷第一章 詞法「陷阱」

1.不同於 為賦值運算,為比較 2.和 不同於 和 按位運算子 邏輯運算子 3.詞法分析中的 貪心法 c語言的某些符號,例如 只有乙個字元長,還有其他符號,例如 有多個字元。編譯器1將程式分解成符號的方法是,從左到右乙個字元乙個字元地讀入,如果判斷已經讀入的兩個字元組成的字串是否可能是乙個符號的組成...

C陷阱與缺陷 第一章 詞法陷阱

符號 token 指程式的乙個基本組成單元,其作用相當於乙個句子中的單詞,是程式的乙個基本的資訊單元。組成符號的字串行就不相同,同一組字串行在某個上下文環境中屬於乙個符號,而在另乙個上下文環境中可能屬於完全不同的另乙個符號。編譯器中負責將程式分解為乙個乙個符號的部分,一般稱為 詞法分析器 c語言中,...

第一章 詞法結構

1.1 字符集 1.1.1 js程式使用unicode字符集編寫的。unicode是ascii 和latin 1的超集,並支援地球上幾乎所有在用的語言。1.1.2 j ascript是區分大小寫的語言,html不區分大小寫,所以在html中標記和屬性名可以大寫也可以小寫,但是例如設定時間處理程式時o...