[CodeSOD] else...Where??

看板C_and_CPP (C/C++)作者 (殺人貓™)時間16年前 (2010/02/04 02:51), 編輯推噓6(6023)
留言29則, 10人參與, 最新討論串1/3 (看更多)
中文翻譯其實滿難翻的,所以就不翻了 =P 最近比較沒加班的話,會慢慢更新一些The Daily WTF的文章跟大家分享一下 http://thedailywtf.com/Articles/Else-where.aspx 「我手下曾經有一個非常強的專家,他留下一句名言:給我足夠的NAND Gate(譯註 : 這 是一種邏輯閘,相當於先取and再取not...剩下的請查閱這裡),我將統治全世界」,Rob B,在他的一本書裡面寫到:「其實換個繞口令一點的說法,你用上一整片的NAND Gates, 你可以做出其他邏輯閘能作到的任何事情。當然啦,因為有其他邏輯閘能作這些事情,你 實在不該浪費一狗票NAND gates來作這種無聊的事情。恩...這樣的確是辦得到的... 寫code的時候偶爾也會有類似的思維」 「前陣子我們從我們的外包商那裡看到了一份實在是爛到爆炸的C++ code。這東西平均每 行出錯率實在是真他媽的高,而且他的寫碼風格讓我們越看越想咒他老母。不過,這種 What the fuck的感覺,到我們看到這組code的時候達到了最高點。」 while(true) { if(mainType == 7) { subType = 4; break; } if(mainType == 9) { subType = 6; break; } if(mainType == 11) { subType = 9; break; } break; } 「來來來我們看看這堆鳥東西....」Rob繼續寫到:「我花了些時間在想,他幹麼寫這樣 ?這個while loop到底是幹麼的?只是拿來搭配break跳過下面那些if的嗎?我還真沒看 過那麼蠢的,完全不是拿來作條件判斷的break...好啦,這是我第一次看到。」 Bob補充:「我幾乎可以確定這傢伙完全不知道什麼叫做else if....他好像只知道if while break,所以就把他們拼在一起了...用這種超白爛的方法做出這個邏輯。」 --- 感想 : 工程師再美國混口飯吃似乎真的很容易? XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.211.126

02/04 03:28, , 1F
我的印象中,高職老師說過用 NAND 是成本的關係。
02/04 03:28, 1F

02/04 03:30, , 2F
早期 do { ... } while(0); 倒是會被用來當開 block 用的
02/04 03:30, 2F

02/04 03:30, , 3F
工具,因為以前好像不能直接寫 { ... },開 block 是因為
02/04 03:30, 3F

02/04 03:31, , 4F
要宣告新變數。可能寫的人亂抄亂改來的,我猜是這樣 XD
02/04 03:31, 4F

02/04 03:33, , 5F
另外,外國的月亮在近三四年來已經沒有比較圓了。踩到地雷
02/04 03:33, 5F

02/04 03:33, , 6F
的機率在這幾年大大增加,無論是哪套我曾經覺得寫的很好的
02/04 03:33, 6F

02/04 03:34, , 7F
OS / application / library / ...,code quality 幾乎都
02/04 03:34, 7F

02/04 03:34, , 8F
有明顯下降的趨勢。
02/04 03:34, 8F

02/04 05:02, , 9F
還蠻經典的 哈哈~~
02/04 05:02, 9F
※ 編輯: Killercat 來自: 114.25.211.126 (02/04 07:25)

02/04 07:26, , 10F
另外,剛發現我忘了拿掉超聯結...那附上我的原網誌版本
02/04 07:26, 10F

02/04 07:26, , 11F

02/04 10:04, , 12F
同1F, 以前聽過是因為靠NAND就可以拼湊出所有邏輯閘形態
02/04 10:04, 12F

02/04 10:04, , 13F
必要的時候還可以多做一些放空腳位, 讓HW有機會繞線做一
02/04 10:04, 13F

02/04 10:05, , 14F
些patch....
02/04 10:05, 14F

02/04 10:06, , 15F
do{..}while(0); 我們老闆也提供一個想法, 它可以讓寫
02/04 10:06, 15F

02/04 10:07, , 16F
#define macro()時, 使用macro時把code寫的像function
02/04 10:07, 16F

02/04 10:07, , 17F
call一樣; 不過這個用法, 上面while(0)後面不用分號 @@
02/04 10:07, 17F

02/04 10:08, , 18F
最後, 其實那段code是可以直接switch case換掉吧XD
02/04 10:08, 18F

02/04 10:58, , 19F
這種鬼code常看見,只要經我手後,都會不見,不過改的時候
02/04 10:58, 19F

02/04 11:00, , 20F
真的會問候原作(孽)者的媽媽倒是真的,這幾年漸漸修養口
02/04 11:00, 20F

02/04 11:00, , 21F
德,已經見怪不怪了...
02/04 11:00, 21F

02/04 11:03, , 22F
目前那套os quality很高阿??bsd?
02/04 11:03, 22F

02/04 11:24, , 23F
其實我一直認為這個不是寫手功力問題,而是百年餘毒..er
02/04 11:24, 23F

02/04 11:24, , 24F
當然要看過其他部分的code比較能下定論啦 =P
02/04 11:24, 24F

02/04 14:02, , 25F
全用NAND統一製程,比較簡單便宜。
02/04 14:02, 25F

02/04 14:29, , 26F
NAND是最基本的 AND還要靠它做出來
02/04 14:29, 26F

02/05 01:20, , 27F
好久不見 :p
02/05 01:20, 27F

02/06 01:33, , 28F
do while(0) 的另一個功用是拿來取代 goto,這個應該常見
02/06 01:33, 28F

02/06 01:34, , 29F
02/06 01:34, 29F
文章代碼(AID): #1BQSMqSz (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 3 篇):
文章代碼(AID): #1BQSMqSz (C_and_CPP)