正式開槍
首先是錯字:
「10. 不可在 stack 設置過大的變數,否則會造成 stack overflow」
內文中,static / globla variable 應為 global
再來是這次的主角,null pointer:
「03. 你不可以提取(dereference)不知指向何方的指標(包含 null 指標)。」
「06. 你不可以只做 malloc(), 而不做相應的 free(). 否則會造成記憶體漏失」
至少在這兩條中,內文的字句已經隱含了 NULL == 0
(甚至可能 == nullptr,不過在撰文當時 C++11 應該還沒出現就是了)
例如,在 06 中關於 delete 判斷的部分
前面說「把指標指到 0」,但後面提供的例子卻 assign 為 NULL
03 則更是直接,範例裡指到 0 然後馬上後面跟註解「起始化為 null pointer」
雖然在大部分的狀況下是對的,在某些狀況下編譯器也可能會自動幫你轉換
但仍不能完全排除 NULL 不是 0 的可能性,且 0 也未必是不能使用的位址
參考前陣子的討論 #1MwJjpRh (C_and_CPP)
和較久以前的討論 #1Ddq9rDu (C_and_CPP)
以現在的寫法,很容易讓人誤解 NULL 就一定是 0、0 就是空指標
既然置底十三誡的定位是給新手看的,用詞有必要更精確一些
我認為在這個前提下,NULL 和 0 混用並不是一個適當的寫法
至於怎麼改,我還沒想到,各種語言標準其實我也不太熟 Orz
也許可以先把內文的 0 指標全換成 NULL
也許可以新增一段解釋 0、NULL 和 C++ 後來新增的 nullptr 的差別…