2012/4/12
C Programming Experiences
這是一篇隨手心得,目前寫得很粗淺而且很隨意
是散亂一片的資料,尚未整理成有邏輯性的資訊
--------------------------------------------------------------------------------------------------
上午 09:06 2012/5/3
【錯誤訊息】
expected declaration or statement at end of input
可能狀況:
1. 迴圈未註上結尾 '}'
上午 08:57 2012/4/5
【程式架構的考量 - 含括原型】
程式開始撰寫的時候,最需要注意的是:程式架構
常常會發現許多副程式區塊,可能要做好幾件事
每件事各別又是一個副程式,由於同時思考會導致思緒煩雜
所以通常會選擇個別副程式中會最先應用的開始寫,其他的暫不考量
之後寫到其他個別副程式的時候,才發現原先架構很難加入其他的副程式
這時可能就要更改架構了,但這是一件十分費心的事
讓時間回到設計架構的階段,這時雖仍應先寫最先應用的副程式
但是可以再做一個動作:定義副程式原型並且加入架構中
目前不必在副程式寫任何東西,因為用意是讓程式原型可以加入架構中就好
如此,就能整體性的考量程式架構,不會因忽略而導致事後修改的情況了
上午 11:16 2012/3/22
C 語言沒有 Java 的多型,於是若在某個情況下呼叫X函數,而X函數呼叫Y函數
這就表示X函數可能就被限用在這特定的情況下了
因為當其他程式也需要使用X函數時,不見得也需要用到Y函數
這種情況下X函數就無法做到程式碼重複利用。
於是目前想到的方式,就是讓X函數作回傳
接到回傳值之後再接著運算,甚至直接作為其他函式的輸入。
但回傳值只能一個,這表示若有多個變數運算完之後都要回傳的話
就必須改用指標的方式回傳才能完成這項要求。
因此必須在回傳之前就將多個變數值先暫存下來,最直覺的方式就是使用結構體。
回傳前先將多個變數值都暫存在結構體之中,最後再回傳結構體位址就能解決這個問題。
回頭看看自己的程式架構,其實蠻有Java的style
不禁令我想起,是否一開始就應該用 Java 來寫?
最近正準備學Python,原因改天談
愛書請趕快來到吧~
下午 03:43 2012/3/1
在程式開始設計之前,演算法必須先詳細規劃(效能、運算重複造成的資源浪費)
以免後續問題造成演算法架構的更改,對於不熟的程式方面要特別注意
這時可以對程式片段的執行次數來做為規劃的考量。
雖然起初會花上很多時間,但最後會發現這是值得的
因為維護、修改、除錯會輕鬆簡單的多,能省下更多時間。
平常頂多用到結構體指標,很少寫程式用到指標中的指標 char**
雖然剛開始接觸時有些吃力,但坦白說,
真的很好用,特別是在解析字串的時候。
下午 04:50 2012/2/23
【結構體應用技巧】
當碰到許多不同性質卻有關聯性的資料時,通常會使用結構體來儲存資料來方便運算
結構體資料的在函式與主程式間傳遞時,一般是用結構體指標
但是在針對結構體中個別值的計算、指派與印出等,程式的撰寫卻是麻煩而費時
於是有更好方案取代結構體指標的方法,也就是應運『單指標』
在過去修課的作業中,曾練習過指標的位移。EX:
char *p;
printf("p address: %d\n", p++);
printf("next address %d\n", p);
沒想到現在真的需要用這個單指標的方式來設定結構體內的個別值
大概要花兩三個小時再複習一下指標和實例練習才能夠詳盡的了解觀念以應用
【程式多模組結構化】
另一點,一個函式負責一個任務
於是使用多個函式相互支援來達成最終運算,
這樣子的結構化程式設計是必要的。
否則在程式的撰寫、除錯、維護等方面都可能因出現預料之外的狀況
讓Debug的工作變得更加困難。
一次次的經驗真是讓自己吃盡苦頭,
這次真的得改掉自己「半模組化」的壞習慣了。
【給自己的建議 - 程式設計步驟】
1. 排列程式執行的因果、先後順序
2. 用Xmind將主要功能項目至底層的各個小函式一層層的規畫出來
【compiler 不穩】
Dev C++ 的compiler真的不太穩,常出現一些奇怪的現象
例如一個有運算以及印出字串的Loop,原本可以正常印出字串
但是在Loop外面隨便宣告了一個變數之後再 compiler & running
卻發現剛才印出來的字都不見了
似乎是宣告的變數記憶體,影響了原Loop判斷運算式中的變數位址(於是初值改變)
使得原本Loop判斷式中判斷為 True的結果卻因此變為 False,改變了程式結果。
【Dev C++ 5.1.1.0 version】
在這個版本中的compiler會用中文來說明錯誤,但卻沒有顯示錯誤行號
百行的程式還可以藉由說明中的關鍵字來推測及搜尋錯誤點
但是若在大程式中,這恐怕會導致Debug的工作難以進行。
目前的過渡辦法,就是模組化程式,
讓每個函式都都是簡單、短少的程式碼,方便閱讀與維護。
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言