|
我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師% \0 d; \$ ]; m: I
關(guān)注我,一起變得更加優(yōu)秀!- z5 A7 A5 c* K# c) Z) S; z) C
從事嵌入式軟件開發(fā)的工程師朋友都知道,C 語言是一種非常靈活和強大的編程語言,尤其是在操作系統(tǒng)內(nèi)核方面,C 語言更有著舉足輕重的地位。
% P+ d. G4 s. }& f6 P但是,隨著 C 語言編程實踐的發(fā)展和編程語言的演進,以往經(jīng)常使用的一些 C 語言語法特性,逐漸開始被行業(yè)認為,不推薦使用。2 L9 D( s7 S+ O4 ]8 [
主要因為,使用這些語法特性可能會導(dǎo)致代碼可讀性差、可維護性低、安全性問題或者效率低下。, e; e8 l6 o$ U' w! ^
10p2n3ygbk16403644005.jpg (265.38 KB, 下載次數(shù): 3)
下載附件
保存到相冊
10p2n3ygbk16403644005.jpg
2024-11-21 23:11 上傳
& H. V" B. C3 E) S
以下是一些不建議使用的 C 語言語法特性:
7 S2 v+ D! B0 e4 @1. 魔法數(shù)字(Magic Numbers)
$ y3 E' j, |: }2 [ B* ^( p直接在代碼中使用具體的數(shù)值,如 if (x == 5) ,而不是定義為常量或枚舉類型。這樣做會導(dǎo)致該段代碼語義含糊,維護該代碼的程序員極有可能不知道該數(shù)字所表達的含義。
* y2 }( A/ [9 i: Y2. 全局變量( ? s; Q2 }. r+ @ K8 ?& E
過度使用全局變量可能導(dǎo)致代碼難以理解和維護,因為它們可以在程序的任何地方被修改,并且讓各個模塊存在高度的耦合,C 語言軟件規(guī)模越大,越不建議使用全局變量。
9 ?$ c, g: Y1 a: B嵌入式 C 語言,為什么全局變量越少越好?) E, e& H. w( l; t. C ~9 K
3. 宏(Macros)
" H& G7 ^4 w# i宏其實很有用,可以幫助程序員借助編譯器的運算能力,在預(yù)處理階段處理一些內(nèi)容,但過量地使用宏定義,可能會導(dǎo)致代碼閱讀性變差,并且可能導(dǎo)致代碼難以調(diào)試和容易出錯,尤其是在宏展開時。; A p0 O; T' ? w
4. 指針運算
* n3 u1 ]& m2 m. w$ K直接操作指針進行算術(shù)運算,如 p++ ,效率有時是比較高的,但一定一定要注意在進行指針運算時,指針的運算范圍限定,一不小心使用不當,極有可能會造成內(nèi)存訪問錯誤。7 `3 H" _! T" y& K
5. goto語句
% a* e2 ?0 \( a' ?goto 語句可以跳轉(zhuǎn)到程序的任意位置,這個跳轉(zhuǎn)可以任意操作并且會忽略一大段邏輯結(jié)構(gòu)代碼,雖然很多錯誤處理都使用goto,但在業(yè)務(wù)邏輯設(shè)計時建議慎用,這會很容易破壞代碼的結(jié)構(gòu)化,使得代碼難以閱讀和維護。 f0 t( y: D7 J" O+ m
6. 未使用的代碼9 I+ \4 U# S0 S5 @. Z2 ]- z* n1 K
代碼中如果存在大量未使用的變量和函數(shù),這可能會導(dǎo)致混淆和不必要的編譯警告,并且會讓后期的代碼維護變得復(fù)雜和困難,建議代碼提交的時候,把不必要的代碼進行注釋屏蔽或者直接刪除。* C2 B3 W& K3 P$ u1 K
7. C語言中的布爾類型濫用5 y3 p5 e) U L6 \
很多 C 語言程序員喜歡用整型值 0 和 1 用作布爾值,用數(shù)字 0 表示 false,用數(shù)字 1 表示 true,而不是使用 _Bool 類型,這在以前舊的 C 語言語法里面很常見,但建議還是使用 bool 關(guān)鍵字進行變量定義。8 a, o+ d1 [9 c5 f1 V
8. 不安全的字符串操作$ c! C! G. |3 J' L) ?' B6 [! V
使用 strcpy 或 strcat 等不安全的字符串函數(shù),這樣可能會導(dǎo)致緩沖區(qū)溢出,因為這類字符串操作函數(shù)不會檢查緩沖區(qū)的大小,它們會直接操作到字符串的 ‘\0’ 直至結(jié)束。
1 R/ g, _( ~. q! n! s$ T9 K9. 不檢查函數(shù)返回值
6 D4 N- o P7 y* c, b( X* _) ?2 V( Z! t對于返回錯誤信息的函數(shù),不檢查其返回值可能導(dǎo)致程序在遇到錯誤時繼續(xù)執(zhí)行。我們有時候為了省事和方便,會有意無意地忽略函數(shù)或模塊的返回值,但有時候,返回值包含了豐富的函數(shù)執(zhí)行信息。
7 q7 J' Q4 h" m10. 不使用const關(guān)鍵字
4 t8 T/ i/ X+ V, O$ n" i/ u4 q- d對于不應(yīng)該被修改的變量不使用 const 關(guān)鍵字,這可能導(dǎo)致意外修改和難以發(fā)現(xiàn)的錯誤。在變量傳參或初始化定義時,對于一些不再被修改的變量,建議使用 const 關(guān)鍵字,告訴程序員和編譯器,該變量在使用時不會再被修改。! `: R, I; p+ G- h! `7 l
這些只是一些簡單的舉例,但并不是絕對禁止使用。實際上,是否使用某些語法還應(yīng)該取決于具體的編程環(huán)境和業(yè)務(wù)需求。
3 ?- ^$ R6 O7 ?7 p) o/ C( Q% X有些規(guī)范在當時可能是最佳的解決方案,但隨著業(yè)務(wù)和技術(shù)的發(fā)展,更好的替代方案也可能隨之出現(xiàn).
" H1 f2 _2 Y! `6 Y在實際編程中,應(yīng)該盡量遵循最佳的編程實踐和代碼規(guī)范,以提高代碼的質(zhì)量和可維護性。$ v2 H2 _: {$ _* F4 v
-END-
* _! z6 c; \: @: x; N' q往期推薦:點擊圖片即可跳轉(zhuǎn)閱讀
7 E* ^- w' l2 M. |
3 {6 u6 P: n- b5 H% i
, V3 ^4 z' @. m* T 4 \$ F! `4 V$ `) }# S% E! E
) ^/ f: H+ v# w C5 J+ T
phifwgcmtao6403644105.jpg (185.71 KB, 下載次數(shù): 3)
下載附件
保存到相冊
phifwgcmtao6403644105.jpg
2024-11-21 23:11 上傳
& L7 X$ Z% _# C) a% {! g$ r; D ) L) p% I6 l: g2 X2 N# z; R
看了嵌入式大佬的日常工作,真的,我大寫一個【服】字!
8 o3 P; k, f( ^ 4 m2 Q3 f1 }1 W$ `# G1 z- G, d+ b
0 W1 K8 s: A( i( a" E7 E5 y
. J' [3 W4 p. V w, c/ Z 5 y: O3 B6 V" F# ?! n/ w
r22qtmgex1m6403644205.jpg (294.61 KB, 下載次數(shù): 2)
下載附件
保存到相冊
r22qtmgex1m6403644205.jpg
2024-11-21 23:11 上傳
$ a# Z8 [+ l. \3 O. u# u 6 V7 w5 x1 C8 p# b6 J
嗶!你寫的嵌入式 C 語言代碼,短路啦!
* z, z, W% R- ], e, `
. C. H" r5 `, N4 @2 p/ k6 e
. I4 j' |4 o& ~" P5 o 0 `# I0 i% G5 a/ u: L" _4 O
zx2nc24sqyw6403644305.jpg (106.16 KB, 下載次數(shù): 1)
下載附件
保存到相冊
zx2nc24sqyw6403644305.jpg
2024-11-21 23:11 上傳
& v7 W x L+ R2 {8 o& ` 5 o. T) h9 m' z6 J/ v+ B, O5 x
嵌入式軟件,寫代碼之前,真的不需要進行軟件架構(gòu)設(shè)計嗎?( m. w: w2 ~: I: g$ q! B) K
7 t" d3 E; r7 I2 f2 f
6 v1 L3 o; M; i0 s
! {! |2 x) B7 ]( E9 b, A3 n 我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師* o' T; }# o+ V' ]2 j. Z
關(guān)注我,一起變得更加優(yōu)秀!
, d5 Y* W' j& _
ej4bzwdfiy56403644406.png (769.97 KB, 下載次數(shù): 2)
下載附件
保存到相冊
ej4bzwdfiy56403644406.png
2024-11-21 23:11 上傳
|
|