寫程式是一種態度(一)strcmp (轉)
寫正如做人,是一種態度。在寫一個商業級的程式,從寫程式碼的層次來說是否遵守預設的程式碼風格(code convention)?是否遵循簡單、易讀和?是否防範了預期的錯誤?是否檢查了洩漏?是否考慮會有多執行緒重入?等等。從設計的層次來說是否引入了工程的思想?是否採用了OO的分析?是否使用UML來主導了整個流程?是否考慮單元測試和整合測試的QA同步?是否定期生成穩定版本?等等。
:namespace prefix = o ns = "urn:schemas--com::office" />
所有的“是”,是一種正確的態度,它們會讓我們短期痛苦,但長遠快樂。想成為一個真正有責任感的軟體工程師,或者是一個真正有的軟體架構師(Architect),只有從這一個個“是”中,慢慢體會。
六年不停的軟體開發,有時並沒有讓我有什麼驕傲感,相反面對有的經典程式碼,面對前輩或先哲的醍醐灌頂,我的冷汗每個毛孔,令我感到了在這個領域的渺小和無知。也許是好事,人生本來就是螺旋式上升發展的,也許我到了另一個螺旋的開始了。希望用這個系列,同大家探討一下成長的上升過程,而不是原地盤旋。我將扔掉六年所有的浮躁,從頭開始端正態度做程式。
分析經典程式碼是一種最佳方式,我將從最簡單但又最絕妙的開始:strcmp
int __cdecl strcmp (
const char * src,
const char * dst
)
{
int ret = 0 ;
while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
++src, ++dst;
if ( ret < 0 )
ret = -1 ;
else if ( ret > 0 )
ret = 1 ;
return( ret );
}
這是MS C run-time中的strcmp實現原始碼。幾個問題將揭示它的精髓,會對我們寫出相應功能的高質量程式碼提供指導。
1.src和dst都為空串如何返回?
2.為什麼要用unsigned char*強制轉換?
3.可否用*src替換*dst作為while條件?
4.是否是multithread-safe?
5.能否用於multibyte-character strings的比較?
6.能否用更少行表達?
仔細回答了這些問題之後,你會發現思路是否開闊了一些?希望有這種效果。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992160/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 寫程式是一種態度(二)四倍速memmove (轉)
- 換一種態度看程式設計師!程式設計師
- 40 歲了還在寫程式碼,是一種幸福,還是一種悲哀?
- 如果40歲了還在寫程式碼,是一種幸福,還是一種悲哀?
- 如果40歲了還在寫程式碼 是一種幸福 還是一種悲哀?
- Serverless 是一種思想狀態Server
- 程式設計師的nginx技能包(4)——埠轉發,節約是一種美德,規範是一種程式設計師Nginx
- “全棧開發者”是一種心態 - Maciej Walkowiak全棧Mac
- 假如女人是一種程式語言
- 空杯求學 - 學習是一種心態
- 在大公司寫程式碼是一種什麼樣的體驗?
- 編寫可維護的程式碼是一種溝通技巧 - Max Chernyak
- 生活一種狀態,關鍵是要給自己定位
- 用C語言寫strcat、strcpy、strlen、strcmpC語言
- 編寫一個程式求輸入字串的長度字串
- 假如特沒普是一種程式語言
- [譯]mock 是一種程式碼異味(軟體編寫)(第十二部分)Mock
- .NET 動態載入程式集 (一) (轉)
- 寫網路爬蟲程式的三種難度爬蟲
- 在Excel VBA中寫SQL,是一種什麼體驗ExcelSQL
- 靜態型別在 JavaScript 中是一種負擔嗎?型別JavaScript
- 如果說程式語言是一種宗教,你的信仰是?
- 支付寶王益:40歲寫30年程式碼是一種什麼體驗?
- 處理物件的多種狀態及其相互轉換——狀態模式(一)物件模式
- Java是一種廣泛使用的程式語言Java
- 程式碼簽名會成為一種常態嗎
- 一種新的程式設計思路(中): (轉)程式設計
- 一種新的程式設計思路(上) (轉)程式設計
- 產業轉型升級是自救的一種辦法產業
- 程式設計師的三階段,薪資的三大“關”,你對程式設計到底持有的是一種什麼樣的態度?程式設計師
- DRY是一種被高估的程式設計原理 - gordonc程式設計Go
- 程式設計師的激情其實是一種痛苦程式設計師
- 偷懶是程式設計師的一種至高境界程式設計師
- 寫一個可擴充的360度產品旋轉外掛
- 一種新的程式設計思路(中)附: (轉)程式設計
- Linux網路驅動程式編寫(一)(轉)Linux
- Python是一種物件導向的動態型別語言Python物件型別
- 突然意識自己曾經引以為豪的程式設計其實是一種工具,這是一種悲哀嗎?程式設計