謝東來
摘 要:C語言是一種結(jié)構(gòu)化的程序設(shè)計語言,其特點主要是盡量減少對硬件的操作,并具有很強的結(jié)構(gòu)性而后可移植性以及功能性,利用C語言能夠進行編寫系統(tǒng)軟件以及二維、三維圖形等。但是由于C語言設(shè)計程序復雜,是一門比較難學的語言,在C語言軟件設(shè)計中很容易出現(xiàn)一些問題,下面我們就針對C語言軟件設(shè)計中存在的問題進行詳細的分析,以提高C語言軟件設(shè)計的能力。
關(guān)鍵詞:C語言;軟件設(shè)計;問題分析
中圖分類號:TP311.52 文獻標識碼:A 文章編號:1007-9599 (2013) 04-0000-02
1 引言
計算機技術(shù)的不斷更新和發(fā)展擴大了其應(yīng)用的規(guī)模,并且軟件開發(fā)工具、語言和環(huán)境也不斷隨其提高。C語言作為計算機程序設(shè)計語言的一種,在大中小微型機上都有應(yīng)用。C語言之所以適用于開發(fā)各種類型的軟件系統(tǒng),是因為它具有低級語言與高級語言的雙重特性,并具有很強的可移植性[1]。C語言又是一種比較難學的語言,我們要很好的掌握這門語言,就必須了解C語言軟件設(shè)計中常見的問題與有效地解決方案。
2 在軟件設(shè)計中C 語言中若干問題解析
2.1 數(shù)組
在編程設(shè)計中數(shù)組名后采用“[]”是常量表達式,其可以包括常量和符號常量,所以其不能對數(shù)組的大小進行動態(tài)定義。
2.2 指針
使用指針變量前要進行定義,不同于其他的普通變量,只能把地址存放其中而不能賦值。如果沒有給指針變量定位于某個內(nèi)存單元中直接使用的話,會導致指針變量所指定的內(nèi)存單元數(shù)據(jù)丟失、原有數(shù)據(jù)被覆蓋;如果指針變量所指定是內(nèi)存單元剛好是系統(tǒng)內(nèi)存數(shù)據(jù)區(qū),機器運行不正?;蛘咚罊C的現(xiàn)象都可能出現(xiàn)。所以,一定要正確使用指針變量。
通過分析上述程序可以得知,上述程序中運用了帶參數(shù)的宏定義,其中程序中最容易出現(xiàn)錯誤的地方是用實參數(shù)K+1去替換形式參數(shù)a,因此程序就便成為了(K+1)*(K+1),所以結(jié)果就是16,很顯然這個結(jié)果是錯誤的,因為在計算的過程中,忽略了宏定義展開的過程。所以在宏定義展開的過程中,一定要注意其僅僅是簡單的替換,并且一定要在替換后計算。再如上述程序中,宏定義后面a*a是不帶括號的,所以我們在替換的過程中也不要帶括號,其替換后的形式應(yīng)該是K+1*K+1,我們又知道k的值為3,所以此程序的結(jié)果應(yīng)該是3+1*3+1=7,所以最后的結(jié)果應(yīng)該是7[3].
3 C語言軟件設(shè)計中常見問題實例分析——以單片機C語言編程為例
(1)由于C語言具有優(yōu)良的程序結(jié)構(gòu),在模塊化程序設(shè)計方面得到了廣泛的應(yīng)用,而單片機正是應(yīng)用了C語言這一優(yōu)勢,實現(xiàn)不同的模塊完成不同的功能,程序結(jié)構(gòu)顯得非常清晰,并且很容易進行維護和調(diào)試。
(2)合理的選擇數(shù)據(jù)類型。就單片機中的C語言需要和程序存儲器資源結(jié)合起來盡管數(shù)據(jù)類型變得豐富起來,存在的問題是機器語言直接支持的數(shù)據(jù)類型是bit和char 等,這種數(shù)據(jù)類型只能生成較短的代碼,而浮點型、整型等數(shù)據(jù)類型在有一定的內(nèi)部程序或內(nèi)部函數(shù)的支持等情況下能生成較長的代碼[4]。在實際編程中,看起來很簡單的C語言生成的代碼卻很長。針對這一情況,我們一定要根據(jù)編程的實際情況合理的選擇數(shù)據(jù)類型,減少過長的代碼生成。
(3)算法設(shè)計問題。一般程序的設(shè)計應(yīng)用C語言只需要考慮程序功能的實現(xiàn),而單片機C語言還要考慮程序代碼的長短問題以及系統(tǒng)的硬件資源,有的時候不是代碼長度越短、程序算法越簡單越好,有的程序包含有子程序或函數(shù),而他們可能生成很長的代碼,所以在不影響程序運行的情況下,可以盡量優(yōu)化算法[5]。
(4)數(shù)據(jù)存儲器的分配。在單片機中由于內(nèi)部數(shù)據(jù)存儲器RAM僅僅有幾百字節(jié),如果想要擴展外部存儲器RAM將數(shù)據(jù)存儲量增大的情況下則將會導致硬件成本的增加,進而造成單片機系統(tǒng)更加復雜。并且由于訪問外部存儲器所需的代碼要比訪問內(nèi)部的代碼多,因此提高內(nèi)部數(shù)據(jù)存儲器的利用率是非常重要的。單片機系統(tǒng)的內(nèi)部存儲器、壓縮棧以及內(nèi)部堆棧、所有程序變量等都將使用內(nèi)部存儲期RAM。因此在系統(tǒng)設(shè)計中采用C語言對程序進行連接時,C語言軟件設(shè)計中能夠?qū)⒁呀?jīng)被其他程序段釋放的存儲器空間重新定義到另一個程序段的變量中進行使用,但是還應(yīng)該注意的是只有局部變量中的動態(tài)變量才能被釋放6]。所以C語言軟件設(shè)計中應(yīng)使用局部變量,以最大限度提高數(shù)據(jù)存儲器的使用率。
4 結(jié)束語
通過對C語言的特點、函數(shù)、比運算、指針等方面的問題以及單片機C 語言編程應(yīng)注意的若干問題進行剖析,我們不僅了解了其常見的問題,而且探索出了一些有效的解決方案,為更好的應(yīng)用C語言提供了很好的參考依據(jù)。對一門編程語言的熟悉掌握,不僅要學會用它的優(yōu)勢,更重要的是要注意其在細節(jié)上可能出現(xiàn)的問題以及如何采取有效的解決措施,這樣可以大大提高我們對一門編程語言的掌握程度。
參考文獻:
[1]胡世鋒,張海濤.用C語言實現(xiàn)DSP程序設(shè)計的新方法[J].河北北方學院學報(自然科學版),2009(03):120-122.
[2]唐潔,Pollawat Thanarungroj,劉晨等.Pinned OS/Services:A Case Study of XML Parsing on Intel SCC[J].Journal of Computer Science & Technology,2013(01):46-48.
[3]倪瑞曉.C語言編程技術(shù)的分析研究[J].計算機技術(shù)與發(fā)展,2009(12):140-142.
[4]趙冬梅,張賓.在Lab VIEW中調(diào)用Virsual C++的方法[J].河北北方學院學報(自然科學版),2005(02):85-86.
[5]余梓唐.C語言源程序的自動評判系統(tǒng)[J].計算機時代,2010(04):89-90.
[6]王夢,謝翠萍,韓成虎.C語言實驗教學中學生編程常見問題探析[J].中國電力教育,2010(12):146-148.