Re: [討論] 請板友幫忙review置底13誡
正式開槍
首先是錯字:
「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 的差別…
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.228.129.217
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1460804364.A.381.html
推
04/16 19:03, , 1F
04/16 19:03, 1F
→
04/16 19:03, , 2F
04/16 19:03, 2F
→
04/16 19:04, , 3F
04/16 19:04, 3F
→
04/16 19:04, , 4F
04/16 19:04, 4F
→
04/16 19:05, , 5F
04/16 19:05, 5F
→
04/16 19:05, , 6F
04/16 19:05, 6F
→
04/16 19:06, , 7F
04/16 19:06, 7F
→
04/16 19:06, , 8F
04/16 19:06, 8F
→
04/16 19:06, , 9F
04/16 19:06, 9F
→
04/16 19:07, , 10F
04/16 19:07, 10F
→
04/16 19:18, , 11F
04/16 19:18, 11F
→
04/16 20:14, , 12F
04/16 20:14, 12F
→
04/16 20:15, , 13F
04/16 20:15, 13F
→
04/16 20:31, , 14F
04/16 20:31, 14F
→
04/16 20:37, , 15F
04/16 20:37, 15F
→
04/16 20:38, , 16F
04/16 20:38, 16F
→
04/16 20:38, , 17F
04/16 20:38, 17F
→
04/16 20:48, , 18F
04/16 20:48, 18F
→
04/16 20:48, , 19F
04/16 20:48, 19F
→
04/16 20:48, , 20F
04/16 20:48, 20F
→
04/16 22:02, , 21F
04/16 22:02, 21F
→
04/16 22:03, , 22F
04/16 22:03, 22F
→
04/16 22:03, , 23F
04/16 22:03, 23F
→
04/16 22:03, , 24F
04/16 22:03, 24F
→
04/16 22:05, , 25F
04/16 22:05, 25F
→
04/16 22:05, , 26F
04/16 22:05, 26F
推
04/16 22:11, , 27F
04/16 22:11, 27F
→
04/16 22:14, , 28F
04/16 22:14, 28F
→
04/16 22:17, , 29F
04/16 22:17, 29F
推
04/16 22:18, , 30F
04/16 22:18, 30F
→
04/16 22:22, , 31F
04/16 22:22, 31F
推
04/16 22:33, , 32F
04/16 22:33, 32F
→
04/16 22:37, , 33F
04/16 22:37, 33F
推
04/16 22:39, , 34F
04/16 22:39, 34F
推
04/16 22:40, , 35F
04/16 22:40, 35F
→
04/16 22:40, , 36F
04/16 22:40, 36F
→
04/16 22:40, , 37F
04/16 22:40, 37F
→
04/16 22:40, , 38F
04/16 22:40, 38F
推
04/16 22:41, , 39F
04/16 22:41, 39F
→
04/16 22:41, , 40F
04/16 22:41, 40F
→
04/16 22:41, , 41F
04/16 22:41, 41F
推
04/17 02:03, , 42F
04/17 02:03, 42F
→
04/17 02:08, , 43F
04/17 02:08, 43F
→
04/17 02:09, , 44F
04/17 02:09, 44F
推
04/17 02:16, , 45F
04/17 02:16, 45F
推
04/17 02:17, , 46F
04/17 02:17, 46F
推
04/17 02:18, , 47F
04/17 02:18, 47F
推
04/17 02:34, , 48F
04/17 02:34, 48F
→
04/17 02:34, , 49F
04/17 02:34, 49F
→
04/17 03:57, , 50F
04/17 03:57, 50F
→
04/17 03:57, , 51F
04/17 03:57, 51F
→
04/17 03:58, , 52F
04/17 03:58, 52F
→
04/17 03:59, , 53F
04/17 03:59, 53F
推
04/17 17:22, , 54F
04/17 17:22, 54F
推
04/17 17:24, , 55F
04/17 17:24, 55F
推
04/20 10:01, , 56F
04/20 10:01, 56F
推
04/20 17:12, , 57F
04/20 17:12, 57F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):