# 為什麼要深入學習 C 語言? contributed by < [`ofAlpaca`](https://github.com/ofAlpaca) > ###### tags: `CSIE5006` `Note` ## 為什麼不探討 C++ * C 與 C++ 已經漸行漸遠,已經可以當成是兩種不同的語言。 * C++ 改版速度神速。 * 當初 C 語言的目的就是為了撰寫 UNIX。 * [第一個C編譯器怎麼來 ?](http://blog.jobbole.com/94311/) * 先使用組合語言編寫一個 C 的子集編譯器,再透過子集語言去編寫較難一點的 C 語言子集編譯器,一步一步堆疊成完整的 C 語言編譯器。 * 由於最簡單功能的 C 語言子集編譯器可以直接用組合語言寫出來,所以不用編譯。 * C0 -> C1 -> C2-> . . . -> CN -> 完整的 C 語言,可以看成像這樣一步一步疊上去完成第一個 C 語言編譯器。 ## [ISO/IEC 9899](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf) * **object** : 在執行環境下有資料儲存空間,其內容可以表示值。 > C99 [3.14] Region of data storage in the execution environment, the contents of which can represent values. * `&` 在非 bitwise operator 時,應念 "address of" ,表示運算元的位址。 > C99 [6.5.3.2] The unary & operator yields the address of its operand. * `*` 應念成 "value of" 或是 "dereference of" ,`*` 的運算元應該要是 pointer type,表示運算元所指向的值。 > C99 [6.5.3.2] The operand of the unary * operator shall have pointer type. * `char * ` 與 `void *` 是可以互換的。 > C99 [6.2.5.27] A pointer to void shall have the same representation and alignment requirements as a pointer to a character type.