以whois包中的mkpasswd的源碼mkpasswd.c檔案為例,
兩者都需要做的事情:
(1)在程式運作前需要滿足其運作環境,包括聲明需要使用哪些庫哪些檔案,例如c中的條件編譯,shell程式設計中的部分條件判斷,如檔案是否存在、是否可執行
(2)具備靈活性和可移植性:充分運用宏定義或全局變量(shell專用),盡管c中許多宏定義不僅僅用于程式運作還用于程式移植,shell中的許多全局變量也可用于腳本的移植
(3)都需要做參數(argument)聲明:允許使用者給程式傳入那些參數,不允許使用者傳入那些參數;哪些參數是不可同時使用,哪些參數必須同時使用
(4)定義程式是否接受長選項(--sargv)
(5)對使用者的輸入做過濾判斷處理,各種輸入情況的判斷處理、非法輸入和特殊字元的處理
(6)控制使用者使用邏輯和避免流程缺陷:保證使用者輸入不會超出程式設計預期,如輸入(字元串長度、數字長度)溢出,保證流程流向并正确處理和結束
(7)與作業系統結合緊密:符合作業系統規範和作業系統哲學,如恰當的函數傳回值、程式退出傳回值、接受管道、區分stdin、stdout、stderr等
(8)函數調用或外部程式調用,需要捕獲異常并處理異常,來自使用者或系統的中斷處理、信号處理
(9)執行核心方法前做好一切事情
(10)main函數盡可能的清晰精短、注意功能的拆分,保持函數原子性,盡可能的将函數複用,使用必要的縮進
(11)站在巨人的肩膀上,避免重複造輪子,使用并保持一緻的程式設計風格
(12)程式運作完,擦好自己的屁股,程式運作前後充分與使用者互動
(13)适當賣弄一下自己的程式設計技巧和程式設計藝術
(14)有時需要注意語言國際化問題
(15)聲明協定、許可和較為詳細注釋、todo,允許他人使用,改寫,再創作等
(16)接受bug,留下自己的聯系方式,哈哈!
tag:linux c程式設計,linux哲學,unix哲學,linux shell程式設計,linux程式設計思想
--end--