寫程式是一種態度(一)strcmp (轉)

worldblog發表於2007-12-12
寫程式是一種態度(一)strcmp (轉)[@more@]

寫正如做人,是一種態度。在寫一個商業級的程式,從寫程式碼的層次來說是否遵守預設的程式碼風格(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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章