看板 C_and_CPP 關於我們 聯絡資訊
當測試指標的時候常會使用到例如: if (ptr != NULL) { free(ptr); ptr == NULL; } 但是看到一篇文章 Mozilla coding style寫道 https://developer.mozilla.org/En/Mozilla_Coding_Style_Guide - Don't use NULL for pointers. On some systems it's declared as void * and causes a compile warning when assigned to a pointer. Use 0 or nsnull instead. - When testing a pointer, use !myPtr or (myPtr); don't use myPtr != nsnull or myPtr == nsnull. - Do not compare x == PR_TRUE or x == PR_FALSE. Use (x) or (!x) instead. x == PR_TRUE, in fact, is different from if (x)! 我看到 void * 想說是否可攜性有關,例如 16bit or 32bit等等,不過又不是很確定, 讓我有些困惑,有人知道為什麼他會這樣寫嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.156.151
tropical72:昨天剛好問到,上網查了資料,sizeof(void/void*)確實有 04/09 01:24
tropical72:可攜性問題 http://ppt.cc/ioqE depends on machine. 04/09 01:24
legnaleurc:用 0 也有問題吧 ... 要是有的系統的 null_ptr 不是0呢 04/09 01:27
loveme00835:0 只是一個標兵值, 當大家統一用某個奇怪的數值也無 04/09 01:29
loveme00835:不可, 第一點確實有型態上不相容的問題, 第二點看看就 04/09 01:30
loveme00835:好, 這樣只是極盡簡短程式碼而已, 對閱讀無益, 第三點 04/09 01:31
loveme00835:是可以遵守, 前提是你命名都像像 is_avaiable、 04/09 01:32
loveme00835:is_empty 一樣好讀  × 04/09 01:33
legnaleurc:它用 !ptr 就已經算是假設 null==0 ... 這怎麼好像在 04/09 01:33
legnaleurc:砸自己的腳啊 ... 04/09 01:34
firejox:當然有非0的NULL_ptr 04/09 01:35
softwind:pointer size本來就是target machine相依 一致即可~ 04/09 01:58
softwind:(void*) 比較難讓人接受的是 gcc會把 (void*)++當成char* 04/09 01:59
xatier:推 firejox C FAQ 04/09 12:36
LPH66:但是我記得 C 語言規定數值 0 若轉成指標必須是 NULL 指標 04/09 19:54
LPH66:不管那個機器實際上的 NULL 指標值到底是多少... 04/09 19:54
LPH66:所以基本上用 0 一定是沒問題的 04/09 19:55
LPH66:http://twpug.net/docs/ccfaq/node61.html 同一個FAQ裡有說 04/09 20:05