|
我是老溫,一名熱愛學習的嵌入式工程師
$ u/ b6 ~) j% h% ?% s6 l, G關注我,一起變得更加優(yōu)秀!. ?9 J" |( x' M, N1 G
從事嵌入式軟件開發(fā)的工程師朋友都知道,C 語言是一種非常靈活和強大的編程語言,尤其是在操作系統(tǒng)內(nèi)核方面,C 語言更有著舉足輕重的地位。
5 w( u2 P5 j7 [ ~3 P. D0 _/ {但是,隨著 C 語言編程實踐的發(fā)展和編程語言的演進,以往經(jīng)常使用的一些 C 語言語法特性,逐漸開始被行業(yè)認為,不推薦使用。
, h3 G, H3 {' B# m. K/ d5 r主要因為,使用這些語法特性可能會導致代碼可讀性差、可維護性低、安全性問題或者效率低下。$ t5 |% g- T2 o, w6 g
10p2n3ygbk16403644005.jpg (265.38 KB, 下載次數(shù): 3)
下載附件
保存到相冊
10p2n3ygbk16403644005.jpg
2024-11-21 23:11 上傳
' [1 R6 r2 \( H) d+ F1 n$ D" E0 ~以下是一些不建議使用的 C 語言語法特性:
5 `1 s- u- ~$ R! n' R6 G1. 魔法數(shù)字(Magic Numbers)
- |. J8 t4 U2 H) R1 G4 n+ p6 k直接在代碼中使用具體的數(shù)值,如 if (x == 5) ,而不是定義為常量或枚舉類型。這樣做會導致該段代碼語義含糊,維護該代碼的程序員極有可能不知道該數(shù)字所表達的含義。
+ s) X. m2 ]: O( P1 J2. 全局變量* ]4 Q, O- z* V& a3 c5 J u
過度使用全局變量可能導致代碼難以理解和維護,因為它們可以在程序的任何地方被修改,并且讓各個模塊存在高度的耦合,C 語言軟件規(guī)模越大,越不建議使用全局變量。2 f) m/ L7 l% [2 N
嵌入式 C 語言,為什么全局變量越少越好?
6 ^. i! R3 C/ G/ d+ Y' w1 r3. 宏(Macros)
# ~9 T- A% k* X" K宏其實很有用,可以幫助程序員借助編譯器的運算能力,在預處理階段處理一些內(nèi)容,但過量地使用宏定義,可能會導致代碼閱讀性變差,并且可能導致代碼難以調(diào)試和容易出錯,尤其是在宏展開時。
7 D0 L1 Q) Y: c* x4 |2 \4. 指針運算
, X2 D3 C; j# l1 e直接操作指針進行算術運算,如 p++ ,效率有時是比較高的,但一定一定要注意在進行指針運算時,指針的運算范圍限定,一不小心使用不當,極有可能會造成內(nèi)存訪問錯誤。5 C, p$ ?: g) x1 E. C5 q
5. goto語句
3 S! J0 i$ ?8 sgoto 語句可以跳轉(zhuǎn)到程序的任意位置,這個跳轉(zhuǎn)可以任意操作并且會忽略一大段邏輯結(jié)構(gòu)代碼,雖然很多錯誤處理都使用goto,但在業(yè)務邏輯設計時建議慎用,這會很容易破壞代碼的結(jié)構(gòu)化,使得代碼難以閱讀和維護。1 d g, x |! M4 d6 I8 f J
6. 未使用的代碼
( Z2 t7 R" ?$ d! l代碼中如果存在大量未使用的變量和函數(shù),這可能會導致混淆和不必要的編譯警告,并且會讓后期的代碼維護變得復雜和困難,建議代碼提交的時候,把不必要的代碼進行注釋屏蔽或者直接刪除。+ y3 b+ d) Y! w7 M+ B+ o% E/ E! s
7. C語言中的布爾類型濫用7 g/ f1 ]/ N H1 ~# L0 v
很多 C 語言程序員喜歡用整型值 0 和 1 用作布爾值,用數(shù)字 0 表示 false,用數(shù)字 1 表示 true,而不是使用 _Bool 類型,這在以前舊的 C 語言語法里面很常見,但建議還是使用 bool 關鍵字進行變量定義。& a8 x: ~3 b8 t( C" A
8. 不安全的字符串操作0 K3 S1 k% ]' n6 w, O" |) q% v
使用 strcpy 或 strcat 等不安全的字符串函數(shù),這樣可能會導致緩沖區(qū)溢出,因為這類字符串操作函數(shù)不會檢查緩沖區(qū)的大小,它們會直接操作到字符串的 ‘\0’ 直至結(jié)束。
+ U6 z/ \$ h, r9. 不檢查函數(shù)返回值
2 d& X) H7 Y7 g) s* ?' u1 Y" w對于返回錯誤信息的函數(shù),不檢查其返回值可能導致程序在遇到錯誤時繼續(xù)執(zhí)行。我們有時候為了省事和方便,會有意無意地忽略函數(shù)或模塊的返回值,但有時候,返回值包含了豐富的函數(shù)執(zhí)行信息。
4 R0 b: ^' X( n6 _0 m: T* Q& E0 n10. 不使用const關鍵字
3 H& J2 a% F; j. ~對于不應該被修改的變量不使用 const 關鍵字,這可能導致意外修改和難以發(fā)現(xiàn)的錯誤。在變量傳參或初始化定義時,對于一些不再被修改的變量,建議使用 const 關鍵字,告訴程序員和編譯器,該變量在使用時不會再被修改。
& O' ~: p. W9 X這些只是一些簡單的舉例,但并不是絕對禁止使用。實際上,是否使用某些語法還應該取決于具體的編程環(huán)境和業(yè)務需求。4 c: k4 l' {3 }) q/ }% b8 x
有些規(guī)范在當時可能是最佳的解決方案,但隨著業(yè)務和技術的發(fā)展,更好的替代方案也可能隨之出現(xiàn).* F# l. w0 |" B/ G
在實際編程中,應該盡量遵循最佳的編程實踐和代碼規(guī)范,以提高代碼的質(zhì)量和可維護性。, o4 t# c0 p# v# X- `) j% [4 L/ g9 D4 ~
-END-3 r+ X' z% G( O6 z# }1 a
往期推薦:點擊圖片即可跳轉(zhuǎn)閱讀2 z$ Q3 d5 N6 w( l* a* R1 Y2 w7 {
5 Y3 @5 s5 }1 M 0 F Z5 p. {9 e8 G) ?( @/ W
2 e7 H0 `3 h1 P: ^5 }9 f: b
$ g G! c% e( q1 E3 V
phifwgcmtao6403644105.jpg (185.71 KB, 下載次數(shù): 3)
下載附件
保存到相冊
phifwgcmtao6403644105.jpg
2024-11-21 23:11 上傳
2 h7 f: h0 g! x4 K* D6 A/ [7 q
) Q! K) S4 o% q 看了嵌入式大佬的日常工作,真的,我大寫一個【服】字!/ } T* R3 a3 q @% J7 x
+ |0 v0 \/ a: y5 l7 c( \6 W
, d" _- o: L/ N& ]# f f
& Z0 s0 M9 o' C: ]. Q
& ~) i7 \ T& \0 B" g& {* N
r22qtmgex1m6403644205.jpg (294.61 KB, 下載次數(shù): 2)
下載附件
保存到相冊
r22qtmgex1m6403644205.jpg
2024-11-21 23:11 上傳
1 W' n. [4 L3 ?6 k+ F3 J 9 r0 `' J, T- g
嗶!你寫的嵌入式 C 語言代碼,短路啦!- a4 z/ \( D( M
L9 Z4 W( f% h' E ) N5 m' X% _% t+ ?' R; O! S
# R9 i5 l; `3 U5 X1 a
zx2nc24sqyw6403644305.jpg (106.16 KB, 下載次數(shù): 1)
下載附件
保存到相冊
zx2nc24sqyw6403644305.jpg
2024-11-21 23:11 上傳
- B. a( h1 z6 B( Q1 }) R
& s, Q( o, H& d% n
嵌入式軟件,寫代碼之前,真的不需要進行軟件架構(gòu)設計嗎?) y7 I" N/ R- L
4 |6 l3 @! p& Z5 }8 p
' f$ e g1 |, K4 X& i% t; L9 E
% e1 k. I5 `, v 我是老溫,一名熱愛學習的嵌入式工程師
' s' r: h' H1 q0 |4 @: m1 z關注我,一起變得更加優(yōu)秀!) O/ k E8 \9 |1 B
ej4bzwdfiy56403644406.png (769.97 KB, 下載次數(shù): 2)
下載附件
保存到相冊
ej4bzwdfiy56403644406.png
2024-11-21 23:11 上傳
|
|