當前位置:首頁 » 編程語言 » c語言優化

c語言優化

發布時間: 2022-12-29 13:09:37

㈠ 如果c語言函數參數太多,可以怎麼優化

一個函數的參數的數目沒有明確的限制,但是參數過多(例如超過8個)顯然是一種不可取的編程風格。參數的數目直接影響調用函數的速度,參數越多,調用函數就越慢。另一方面,參數的數目少,程序就顯得精練、簡潔,這有助於檢查和發現程序中的錯誤。因此,通常應該盡可能減少參數的數目,如果一個函數的參數超過4個,你就應該考慮一下函數是否編寫得當。 如果一個函數不得不使用很多參數,你可以定義一個結構來容納這些參數,這是一種非常好的解決方法。在下例中,函數print_report()需要使用10個參數,然而在它的說明中並沒有列出這些參數,而是通過一個RPT_PARMS結構得到這些參數。 # include <atdio. h> typedef struct ( int orientation ; char rpt_name[25]; char rpt_path[40]; int destination; char output_file[25]; int starting_page; int ending_page; char db_name[25]; char db_path[40]; int draft_quality; )RPT_PARMS; void main (void); int print_report (RPT_PARMS* ); void main (void) { RPT_PARMS rpt_parm; /*define the report parameter structure variable * / /* set up the report parameter structure variable to pass to the print_report 0 function */ rpt_parm. orientation = ORIENT_LANDSCAPE; rpt_parm.rpt_name = "QSALES.RPT"; rpt_parm. rpt_path = "Ci\REPORTS" rpt_parm. destination == DEST_FILE; rpt_parm. output_file = "QSALES. TXT" ; rpt_parm. starting_page = 1; rpt_pann. ending_page = RPT_END; rpt_pann.db_name = "SALES. DB"; rpt_parm.db_path = "Ci\DATA"; rpt_pann. draft_quality = TRUE; /*call the print_report 0 function; paaaing it a pointer to the parameteM inatead of paMing it a long liat of 10 aeparate parameteM. * / ret_code = print_report(cu*pt_parm); } int print_report(RPT_PARMS*p) { int rc; /*acccM the report parametcra paaaed to the print_report() function */ oricnt_printcr(p->orientation); Kt_printer_quality((p->draft_quality == TRUE) ? DRAFT ; NORMAL); return rc; } 上例唯一的不足是編譯程序無法檢查引用print_report()函數時RPT_PARMS結構的10個成員是否符合要求。

㈡ C語言如何提高程序效率

好的代碼沒有一個統一的衡量標准,在程序員們的世界裡大家也是各自按照自己的標准衡量著自己和別人的代碼。不過有一個標准幾乎是被所有人認同的。服役時間越長、出錯率越高的代碼就是好代碼。所有的編程方法、代碼技巧甚至於設計模式都是為了達到這個目的而產生的。

如何提高程序效率

程序的效率分兩部分:時間效率和空間效率。

時間效率 : 指的是程序運行的速度

空間效率 : 指的是程序佔用內存或者外存的大小

對於這兩點的把握,我們沒有明確的方法。這里給出一些能夠達成共識的規則,大家在今後自己編碼的時候,可以通過這些規則來衡量自己的代碼是否符合要求。

規則1:不要一味地追求程序的效率

如果追求程序效率需要付出降低正確性、可靠性、健壯性、可讀性等質量代價,那麼可以放棄這部分效率的提高。

規則2:優先提高全局效率

只有整個程序的執行效率提高才有意義,把時間和精力放在某一個不常被調用的小模塊優化上得不償失。

規則3:針對瓶頸部分優化

在實際開發工作中,我們經常遇到一些程序執行時間過長,需要優化。有些人上來就開始逐行檢查代碼,把認為可能影響效率的地方都盡量修改一遍。這樣做不僅浪費時間,更重要的是,常常修改一遍後依然看不到明顯的效果。

這種情況下,正確的方法是先找出限制效率的「瓶頸」,在這個部分做有針對性的優化。這么做才事半功倍。

規則4:先優化數據結構和演算法,再優化執行代碼

程序的兩大要素是演算法和數據結構,它們貫穿於程序的始終。因此,對它們的優化能夠起到意想不到的良好效果。

規則5:時間效率和空間效率的矛盾

大多數時候,時間效率和空間效率是對立的。這就是程序設計中兩個很重要的方法論,一個是「以空間換時間」,另一個是「以時間換空間」。此時應當分析那個更重要,作出適當的折中。

早間年,硬體成本比較高,人們大多都採用以時間換空間的策略,花費一些時間,減少內存開銷。如今,內存條的價格已經非常便宜了,人們注重的`是軟體的友好性,因此大部分時候都是用空間換時間。

規則6:代碼不是越短越好

很多資深程序員都會有這樣一個誤區,完成同一個功能,代碼越短越好。還經常有人說這樣的話:「就這么個功能我幾行代碼就搞定了」。其實,追求代碼精簡是一個很大的誤區。因為精簡的代碼並不一定產生高效的機器碼。同時,它還付出了可讀性這一代價。正確的做法是適當地做到代碼精簡。

注意事項

1. 書寫錯誤

經常有人把「==」誤寫成「=」。「||」、「&&」、「<=」、「>=」這類符號也很容易發生少一個的錯誤。最可怕的是編譯器根本發現不了這樣的錯誤。

2. 初始化

變數(指針、數組)被創建之後應當立刻初始化,防止把未被初始化的變數當成右值使用。

3. 數值錯誤

這也是一類非常容易忽略的錯誤。變數的初值、預設值錯誤,或精度不夠,一旦出錯不易發現。

4. 類型轉換

為了避免數據類型轉換的錯誤,我們要盡量使用顯式的數據類型轉換,避免在編譯器中執行非我們所願的隱式數據類型轉換。

5. 溢出

溢出分兩種,一種是超過數據類型取值范圍的賦值,另一種是數組下標范圍越界。這兩種都是要時刻注意的。

7. 避免編寫技巧性很高代碼

技巧性過高的代碼一定是可讀性較差的代碼,這種代碼不易維護,後期的成本較高。

8. 好代碼要復用,壞代碼要重寫

如果原有的代碼質量比較好,盡量復用它。但是不要修補很差勁的代碼。當我們遇到差勁代碼時,最好的方法是重寫新代碼替換它。

9. 盡量使用標准庫函數

對於標准庫中有的函數,我們不要再花時間自己實現。很簡單,你自己實現的一定不比庫函數效率高。

10. 把編譯器的選擇項設置為最嚴格狀態

只有最嚴格的審查自己的代碼,才能寫出優秀的軟體產品。很多人甚至連編譯過程中出現的warning都懶得處理,這種態度堅決不能有。

㈢ c語言怎麼提高運行速度

這個程序有多組輸入,而這多組輸入的運算都是相同的,所以可以利用數組f之前計算過的信息。

在你的code里做的修改,如果有疑問,歡迎交流

#include<stdio.h>
intmain()
{
inta,b,n,c;
intpre_max_idx=2;
intf[100];
f[1]=1;
f[2]=1;
while(scanf("%d%d%d",&a,&b,&n)!=EOF)
{
if(n<=pre_max_idx){//如果之前計算過就直接返回
printf("%d ",f[n]);
continue;
}
if(n<=0)
continue;
for(c=n+1,n=pre_max_idx+1;n!=c;n++)//這里從pre_max_idx開始
f[n]=(a*f[n-1]+b*f[n-2])&7;
pre_max_idx=n-1;//修改當前的最大
printf("%d ",f[n-1]);
}
return0;
}

㈣ 幾種C語言優化代碼技巧

以下內容摘自李亞鋒先生的《經典C面試真題精講》
1.結構體設計為成員最長類型長度的整數倍;
2.減少函數參數的個數,不需要返回值的函數定義為void類型;
3.if...else....多條件分支語句中,把出現頻率高的條件放在前面;
4.同時聲明多個相同類型變數優於分別單獨聲明變數;
5.減少定義全局變數;
6.使用#define定義常量和小的函數實現;
7.有些情況嵌套匯編語句效率更高;
8.佔用大的存儲空間可以減少執行時間,同理時間也可以換取空間;
9提高程序演算法效率;

㈤ C語言編程解決最優化問題

C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局為C語言制定了一套完整的美國國家標准語法,稱為ANSI C,作為C語言最初的標准。 目前2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC)發布的C11標準是C語言的第三個官方標准,也是C語言的最新標准,該標准更好的支持了漢字函數名和漢字標識符,一定程度上實現了漢字編程。
C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。
其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

㈥ c語言防止優化

編譯器編譯命令里有設置選項,通過設置,你可以要求 不優化,也可以要求用哪種優化。
具體選項有哪些,要查自己編譯器的幫助文件。
例如,MS VC++ 6.0 編譯器編
優化選項:
/O1:優化使產生的可執行代碼最小
/O2:優化使產生的可執行代碼速度最快
/Oa:指示編譯器程序里沒有使用別名,可以提高程序的執行速度
/Ob:控制內聯(inline)函數的展開
/Od:禁止代碼優化
/Og:使用全局優化
/Oi:用內部函數去代替程序里的函數調用,可以使程序運行的更快,但程序的長度變長
/Op:提高浮點數比較運算的一致性
/Os:產生盡可能小的可執行代碼
/Ot:產生盡可能塊的可執行代碼
/Ow:指示編譯器在函數體內部沒有使用別名
/Ox:組合了幾個優化開關,達到盡可能多的優化
/Oy:阻止調用堆棧里創建幀指針

/O2 為了加速,會優化掉。 選 /Od 不優化。

熱點內容
安卓開發選哪個版本的SDK 發布:2025-07-02 22:19:07 瀏覽:485
未上傳圖片 發布:2025-07-02 22:14:01 瀏覽:598
安卓qq直播怎麼分享聲音 發布:2025-07-02 22:13:21 瀏覽:249
安卓系統怎麼刷機清除內存 發布:2025-07-02 22:08:19 瀏覽:696
安卓手機6位數密碼有多少組 發布:2025-07-02 21:50:31 瀏覽:797
存儲卡視頻多了 發布:2025-07-02 21:49:40 瀏覽:850
ajax無刷新上傳圖片 發布:2025-07-02 21:32:56 瀏覽:117
編譯器不認pow函數 發布:2025-07-02 21:27:04 瀏覽:339
w10隱藏文件夾 發布:2025-07-02 21:27:03 瀏覽:534
電腦d盤拒絕訪問 發布:2025-07-02 21:27:02 瀏覽:779