電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 118|回復: 0
收起左側(cè)

有哪些不推薦使用的嵌入式 C 語言語法特性?

[復制鏈接]

485

主題

485

帖子

1623

積分

三級會員

Rank: 3Rank: 3

積分
1623
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-11-21 17:50:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
我是老溫,一名熱愛學習的嵌入式工程師
$ 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

' [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

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

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 - 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
回復

使用道具 舉報

發(fā)表回復

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關注微信 下載APP 返回頂部 返回列表