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

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

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

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

[復(fù)制鏈接]

485

主題

485

帖子

1623

積分

三級(jí)會(huì)員

Rank: 3Rank: 3

積分
1623
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-11-21 17:50:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師
, a" W* ?# }* L2 T* B2 i. d關(guān)注我,一起變得更加優(yōu)秀!
0 D1 ?8 ]$ c3 I( T* X9 @3 r從事嵌入式軟件開發(fā)的工程師朋友都知道,C 語(yǔ)言是一種非常靈活和強(qiáng)大的編程語(yǔ)言,尤其是在操作系統(tǒng)內(nèi)核方面,C 語(yǔ)言更有著舉足輕重的地位。$ w+ F* L/ g+ r( m( [2 _. T7 V
但是,隨著 C 語(yǔ)言編程實(shí)踐的發(fā)展和編程語(yǔ)言的演進(jìn),以往經(jīng)常使用的一些 C 語(yǔ)言語(yǔ)法特性,逐漸開始被行業(yè)認(rèn)為,不推薦使用。; D- j5 N0 n3 T! _: _
主要因?yàn),使用這些語(yǔ)法特性可能會(huì)導(dǎo)致代碼可讀性差、可維護(hù)性低、安全性問(wèn)題或者效率低下。) h" B; y, ]! f

1 |4 J' i& @% f, q以下是一些不建議使用的 C 語(yǔ)言語(yǔ)法特性:
4 D3 _( C& B4 p* D/ x' N1. 魔法數(shù)字(Magic Numbers)
7 V) |5 S" U; Z直接在代碼中使用具體的數(shù)值,如 if (x == 5) ,而不是定義為常量或枚舉類型。這樣做會(huì)導(dǎo)致該段代碼語(yǔ)義含糊,維護(hù)該代碼的程序員極有可能不知道該數(shù)字所表達(dá)的含義。6 H6 ~8 y) T8 V# H; L7 g! l
2. 全局變量: x* |* f8 Z4 N' w" `) g3 o
過(guò)度使用全局變量可能導(dǎo)致代碼難以理解和維護(hù),因?yàn)樗鼈兛梢栽诔绦虻娜魏蔚胤奖恍薷模⑶易尭鱾(gè)模塊存在高度的耦合,C 語(yǔ)言軟件規(guī)模越大,越不建議使用全局變量。
6 ?. ~* {* f$ L5 l; x嵌入式 C 語(yǔ)言,為什么全局變量越少越好?
: U. E$ F& K7 {3. 宏(Macros)
0 G! q$ [% G* y( g& j宏其實(shí)很有用,可以幫助程序員借助編譯器的運(yùn)算能力,在預(yù)處理階段處理一些內(nèi)容,但過(guò)量地使用宏定義,可能會(huì)導(dǎo)致代碼閱讀性變差,并且可能導(dǎo)致代碼難以調(diào)試和容易出錯(cuò),尤其是在宏展開時(shí)。+ _# N6 M/ Y( y) [
4. 指針運(yùn)算
( W4 {% t9 N# Q  P, i# M1 K直接操作指針進(jìn)行算術(shù)運(yùn)算,如 p++ ,效率有時(shí)是比較高的,但一定一定要注意在進(jìn)行指針運(yùn)算時(shí),指針的運(yùn)算范圍限定,一不小心使用不當(dāng),極有可能會(huì)造成內(nèi)存訪問(wèn)錯(cuò)誤。
, Z/ ^/ H* V% @) n1 R$ E3 P, U5. goto語(yǔ)句" l$ b) P" a8 H' Y( c8 D1 u; H
goto 語(yǔ)句可以跳轉(zhuǎn)到程序的任意位置,這個(gè)跳轉(zhuǎn)可以任意操作并且會(huì)忽略一大段邏輯結(jié)構(gòu)代碼,雖然很多錯(cuò)誤處理都使用goto,但在業(yè)務(wù)邏輯設(shè)計(jì)時(shí)建議慎用,這會(huì)很容易破壞代碼的結(jié)構(gòu)化,使得代碼難以閱讀和維護(hù)。6 b0 x6 x9 C& K, q, R
6. 未使用的代碼4 V# u! q" Q/ p5 Q- C5 m
代碼中如果存在大量未使用的變量和函數(shù),這可能會(huì)導(dǎo)致混淆和不必要的編譯警告,并且會(huì)讓后期的代碼維護(hù)變得復(fù)雜和困難,建議代碼提交的時(shí)候,把不必要的代碼進(jìn)行注釋屏蔽或者直接刪除。
) @0 F! {3 @& p0 V1 F, g7. C語(yǔ)言中的布爾類型濫用
0 B8 E# s. L: i, ~2 I# |7 g4 R很多 C 語(yǔ)言程序員喜歡用整型值 0 和 1 用作布爾值,用數(shù)字 0 表示 false,用數(shù)字 1 表示 true,而不是使用 _Bool 類型,這在以前舊的 C 語(yǔ)言語(yǔ)法里面很常見,但建議還是使用 bool 關(guān)鍵字進(jìn)行變量定義。
3 f  F: q9 M3 S/ ]) T8. 不安全的字符串操作. K: j% Y- o* }% m2 F" m' x
使用 strcpy 或 strcat 等不安全的字符串函數(shù),這樣可能會(huì)導(dǎo)致緩沖區(qū)溢出,因?yàn)檫@類字符串操作函數(shù)不會(huì)檢查緩沖區(qū)的大小,它們會(huì)直接操作到字符串的 ‘\0’ 直至結(jié)束。1 L& L# c7 q3 J- X  d& ?# Y9 J& t6 J
9. 不檢查函數(shù)返回值( a) x8 \4 a8 o$ y# [
對(duì)于返回錯(cuò)誤信息的函數(shù),不檢查其返回值可能導(dǎo)致程序在遇到錯(cuò)誤時(shí)繼續(xù)執(zhí)行。我們有時(shí)候?yàn)榱耸∈潞头奖,?huì)有意無(wú)意地忽略函數(shù)或模塊的返回值,但有時(shí)候,返回值包含了豐富的函數(shù)執(zhí)行信息。' c3 e, H5 G# b
10. 不使用const關(guān)鍵字. ^, r8 n# c+ o, Z, \
對(duì)于不應(yīng)該被修改的變量不使用 const 關(guān)鍵字,這可能導(dǎo)致意外修改和難以發(fā)現(xiàn)的錯(cuò)誤。在變量傳參或初始化定義時(shí),對(duì)于一些不再被修改的變量,建議使用 const 關(guān)鍵字,告訴程序員和編譯器,該變量在使用時(shí)不會(huì)再被修改。
! u8 R9 {1 g# }) X5 H/ }這些只是一些簡(jiǎn)單的舉例,但并不是絕對(duì)禁止使用。實(shí)際上,是否使用某些語(yǔ)法還應(yīng)該取決于具體的編程環(huán)境和業(yè)務(wù)需求。4 j6 I, {. P" i; ]$ M
有些規(guī)范在當(dāng)時(shí)可能是最佳的解決方案,但隨著業(yè)務(wù)和技術(shù)的發(fā)展,更好的替代方案也可能隨之出現(xiàn).' P" s$ `8 d8 f( x4 l" B
在實(shí)際編程中,應(yīng)該盡量遵循最佳的編程實(shí)踐和代碼規(guī)范,以提高代碼的質(zhì)量和可維護(hù)性。
7 M: T8 x# w* A1 P0 W: P* V* E-END-+ a) B! h8 n- Q/ ^0 W
往期推薦:點(diǎn)擊圖片即可跳轉(zhuǎn)閱讀
' [% H' h" Z" M- F                                                       
1 ]  f$ j0 N5 z& ^: G! _                                                               
' _6 [# u$ q: Q3 g2 ^9 W, i; _4 y$ ?                                                                       
- h3 x( a0 _+ |" _' j, J                                                                                7 D: o" h5 ~5 \+ N9 N' i: O. K* ?
4 a- n4 a+ i2 A
                                                                               
% r& ]- t1 w8 o+ j. k4 P                                                                                        看了嵌入式大佬的日常工作,真的,我大寫一個(gè)【服】字!2 @$ A5 g% s' _
                                                        # L( Q0 t5 R0 a$ I1 p, i% O
                                                                4 }: V# R9 h- X
                                                                        % z, Y) _/ g) R' b9 e
                                                                               
6 ?+ W- E& V1 f$ m0 B: K* A 0 w6 f1 `8 c  z! l  h; ^
                                                                               
2 ]8 q+ \- n' E0 q                                                                                        嗶!你寫的嵌入式 C 語(yǔ)言代碼,短路啦!  j3 j# K3 y( U4 i* ?- s1 A
                                                                , ^9 T5 Y  V; |1 l0 b: l' L
                                                                          {" k  t/ @* Y* m9 C. C' x( T
                                                                                1 W3 ]+ I2 N! F& `: r8 Q) s# t8 `

* y* y( n7 u8 u! j$ E1 N                                                                               
1 p# j; X5 n' _6 A- @$ \- V                                                                                        嵌入式軟件,寫代碼之前,真的不需要進(jìn)行軟件架構(gòu)設(shè)計(jì)嗎?
* J' ~4 n+ R; M+ \  }                                                                                * t7 \# s* B4 c6 h( J
                                                                        / m3 S2 ]* Z. q: U" y
                                                                3 ?2 W. L: K+ K8 G- z4 ]# k7 R3 s
                                                        我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師# P- m. S6 J! u$ I! n1 Y2 t7 ~
關(guān)注我,一起變得更加優(yōu)秀!' M! {" o+ M, K3 b8 U4 ?; Y5 g

發(fā)表回復(fù)

本版積分規(guī)則


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