- C陷阱與缺陷
- (美)安德魯·凱尼格
- 716字
- 2021-01-15 16:46:06
第1章 詞法“陷阱”
在閱讀一個英文句子時,我們并不去考慮組成這個句子的單詞中單個字母的含義,而是把單詞作為一個整體來理解。確實,字母本身并沒有什么意義,我們總是將字母組成單詞,然后給單詞賦予一定的意義。
對于用C語言或其他語言編寫的程序,道理也是一樣的。程序中的單個字符孤立來看并沒有什么意義,只有結合上下文才有意義。因此,在p->s = "->";這個語句中,兩處出現的'-'字符的意義大相徑庭。更精確地說,上式中出現的兩個'-'字符分別是不同符號的組成部分:第一個'-'字符是符號->的組成部分,而第二個'-'字符是一個字符串的組成部分。此外,符號->的含義與組成該符號的字符'-'或字符'>'的含義也完全不同。
術語“符號”(token)指的是程序的一個基本組成單元,其作用相當于一個句子中的單詞。從某種意義上說,一個單詞無論出現在哪個句子中,它代表的意思都是一樣的,是一個表義的基本單元。與此類似,符號就是程序中的一個基本信息單元。而組成符號的字符序列就不同,同一組字符序列在某個上下文環境中屬于一個符號,而在另一個上下文環境中可能屬于完全不同的另一個符號。
譯注:
如上面的字符'-'和字符'>'組成的字符序列->,在不同的上下文環境中,一個代表->運算符,一個代表字符串"->"。
編譯器中負責將程序分解為一個一個符號的部分,一般稱為“詞法分析器”。
再看下面一個例子:
if (x > big) big = x;
這個語句的第一個符號是C語言的關鍵字if,緊接著下一個符號是左括號,再下一個符號是標識符x,再下一個是大于號,再下一個是標識符big,以此類推。在C語言中,符號之間的空白(包括空格符、制表符或換行符)將被忽略,因此上面的語句還可以寫成:
if
(
x
>
big
)
big
=
x
;
本章將探討符號和組成符號的字符間的關系,以及有關符號含義的一些常見誤解。
推薦閱讀
- Unity Virtual Reality Projects
- Raspberry Pi 2 Server Essentials
- MATLAB實用教程
- Python Network Programming Cookbook(Second Edition)
- 利用Python進行數據分析(原書第3版)
- Advanced Oracle PL/SQL Developer's Guide(Second Edition)
- 表哥的Access入門:以Excel視角快速學習數據庫開發(第2版)
- Spring快速入門
- Java實戰(第2版)
- NetBeans IDE 8 Cookbook
- Instant Zurb Foundation 4
- Unity 2017 Game AI Programming(Third Edition)
- 奔跑吧 Linux內核
- 官方 Scratch 3.0 編程趣味卡:讓孩子們愛上編程(全彩)
- Yii2 By Example