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

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

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

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

[復(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í)的嵌入式工程師1 G8 \" _1 {* t1 f  F9 `% a
關(guān)注我,一起變得更加優(yōu)秀!2 C+ I% b) R# X. v: J$ v
從事嵌入式軟件開發(fā)的工程師朋友都知道,C 語言是一種非常靈活和強(qiáng)大的編程語言,尤其是在操作系統(tǒng)內(nèi)核方面,C 語言更有著舉足輕重的地位。1 Z7 c1 \8 l( b) u: _2 V3 R
但是,隨著 C 語言編程實(shí)踐的發(fā)展和編程語言的演進(jìn),以往經(jīng)常使用的一些 C 語言語法特性,逐漸開始被行業(yè)認(rèn)為,不推薦使用。
4 ~- K7 O2 X% z/ F. \$ G主要因?yàn),使用這些語法特性可能會(huì)導(dǎo)致代碼可讀性差、可維護(hù)性低、安全性問題或者效率低下。
6 L% g) }/ @/ K) ~- Y* _
- l! e% p' F: d以下是一些不建議使用的 C 語言語法特性:
) U4 ]: d% }% o1 Y1. 魔法數(shù)字(Magic Numbers)
; L8 r/ }4 C8 a8 b  h: V直接在代碼中使用具體的數(shù)值,如 if (x == 5) ,而不是定義為常量或枚舉類型。這樣做會(huì)導(dǎo)致該段代碼語義含糊,維護(hù)該代碼的程序員極有可能不知道該數(shù)字所表達(dá)的含義。$ b. I# ?. T# B' J* ^9 r5 Y
2. 全局變量
$ B' Z1 d. Q' o4 g) Q過度使用全局變量可能導(dǎo)致代碼難以理解和維護(hù),因?yàn)樗鼈兛梢栽诔绦虻娜魏蔚胤奖恍薷,并且讓各個(gè)模塊存在高度的耦合,C 語言軟件規(guī)模越大,越不建議使用全局變量。
6 I" K! m, v3 `2 y# c6 P嵌入式 C 語言,為什么全局變量越少越好?
4 n, W" `. d$ r3. 宏(Macros)2 s1 e! j# |0 d0 A! [3 n
宏其實(shí)很有用,可以幫助程序員借助編譯器的運(yùn)算能力,在預(yù)處理階段處理一些內(nèi)容,但過量地使用宏定義,可能會(huì)導(dǎo)致代碼閱讀性變差,并且可能導(dǎo)致代碼難以調(diào)試和容易出錯(cuò),尤其是在宏展開時(shí)。
7 ?; R' p& l$ }$ F9 |4. 指針運(yùn)算0 t& m( |* f2 G  s
直接操作指針進(jìn)行算術(shù)運(yùn)算,如 p++ ,效率有時(shí)是比較高的,但一定一定要注意在進(jìn)行指針運(yùn)算時(shí),指針的運(yùn)算范圍限定,一不小心使用不當(dāng),極有可能會(huì)造成內(nèi)存訪問錯(cuò)誤。
# ^: o9 S0 y' T# g5. goto語句! I& ?; I! p! E
goto 語句可以跳轉(zhuǎn)到程序的任意位置,這個(gè)跳轉(zhuǎn)可以任意操作并且會(huì)忽略一大段邏輯結(jié)構(gòu)代碼,雖然很多錯(cuò)誤處理都使用goto,但在業(yè)務(wù)邏輯設(shè)計(jì)時(shí)建議慎用,這會(huì)很容易破壞代碼的結(jié)構(gòu)化,使得代碼難以閱讀和維護(hù)。3 I% U% p3 A3 h% c# v4 D/ r
6. 未使用的代碼& H( |* [  m  e+ U- l% D0 F$ R
代碼中如果存在大量未使用的變量和函數(shù),這可能會(huì)導(dǎo)致混淆和不必要的編譯警告,并且會(huì)讓后期的代碼維護(hù)變得復(fù)雜和困難,建議代碼提交的時(shí)候,把不必要的代碼進(jìn)行注釋屏蔽或者直接刪除。, @* s- z' T2 V% `: C' M
7. C語言中的布爾類型濫用+ |7 S$ c0 `, C9 a0 S' }
很多 C 語言程序員喜歡用整型值 0 和 1 用作布爾值,用數(shù)字 0 表示 false,用數(shù)字 1 表示 true,而不是使用 _Bool 類型,這在以前舊的 C 語言語法里面很常見,但建議還是使用 bool 關(guān)鍵字進(jìn)行變量定義。9 `3 q9 J* m' N1 X
8. 不安全的字符串操作
1 N- N7 M0 ?! l' V: x  M5 s2 I使用 strcpy 或 strcat 等不安全的字符串函數(shù),這樣可能會(huì)導(dǎo)致緩沖區(qū)溢出,因?yàn)檫@類字符串操作函數(shù)不會(huì)檢查緩沖區(qū)的大小,它們會(huì)直接操作到字符串的 ‘\0’ 直至結(jié)束。* i" M, Q0 A7 P8 x9 U/ T
9. 不檢查函數(shù)返回值
. n7 d7 O" s% G; i, ~3 @0 m% b對(duì)于返回錯(cuò)誤信息的函數(shù),不檢查其返回值可能導(dǎo)致程序在遇到錯(cuò)誤時(shí)繼續(xù)執(zhí)行。我們有時(shí)候?yàn)榱耸∈潞头奖悖瑫?huì)有意無意地忽略函數(shù)或模塊的返回值,但有時(shí)候,返回值包含了豐富的函數(shù)執(zhí)行信息。" n* R3 V$ o7 @5 }# o. K
10. 不使用const關(guān)鍵字
. D4 h2 R& N+ F3 E+ z, [對(duì)于不應(yīng)該被修改的變量不使用 const 關(guān)鍵字,這可能導(dǎo)致意外修改和難以發(fā)現(xiàn)的錯(cuò)誤。在變量傳參或初始化定義時(shí),對(duì)于一些不再被修改的變量,建議使用 const 關(guān)鍵字,告訴程序員和編譯器,該變量在使用時(shí)不會(huì)再被修改。
; c% o- \8 S: k' {0 [- U' m這些只是一些簡單的舉例,但并不是絕對(duì)禁止使用。實(shí)際上,是否使用某些語法還應(yīng)該取決于具體的編程環(huán)境和業(yè)務(wù)需求。
  v" p* B# n5 {, O* T' l有些規(guī)范在當(dāng)時(shí)可能是最佳的解決方案,但隨著業(yè)務(wù)和技術(shù)的發(fā)展,更好的替代方案也可能隨之出現(xiàn).
, f. z  @; G, V. D* k6 l4 D在實(shí)際編程中,應(yīng)該盡量遵循最佳的編程實(shí)踐和代碼規(guī)范,以提高代碼的質(zhì)量和可維護(hù)性。
$ I8 ?& r6 F4 L% K, V5 B% c/ j-END-8 C$ E4 K5 E' J! |6 K
往期推薦:點(diǎn)擊圖片即可跳轉(zhuǎn)閱讀$ A  V: E0 v; w$ y$ T# O% Z5 f
                                                       
8 D8 G" H- U5 h. [5 r                                                               
  [" I, \1 x* |! N                                                                       
. h3 V4 s, Z9 y! g                                                                                / L- _4 v: w$ g1 b; M
4 W. N8 v7 Y& j2 m$ W9 L
                                                                                  V, Y7 G0 m1 k( F6 W
                                                                                        看了嵌入式大佬的日常工作,真的,我大寫一個(gè)【服】字!
6 _& o+ E; W' k8 s2 x                                                        7 s+ S* I% \9 J5 ~3 g, l
                                                                ; F6 P1 t) r1 `% R2 L$ }5 {
                                                                        9 J7 W' r  y. O
                                                                                & I% a1 y* A& Q( e! g/ I# w6 N% K
& a% W# ^  @4 U0 v% O) a
                                                                               
8 ?( o6 m- N, n7 I4 K# U' c                                                                                        嗶!你寫的嵌入式 C 語言代碼,短路啦!
# }- q" n4 O: @6 U. z' K8 B5 L                                                                2 l5 t. |/ V7 k, P( s) E* S
                                                                        0 V& ^" C" I9 G
                                                                               
% x* S# ~' O4 E4 B
. u6 J. s, e% Y1 [                                                                               
. I) n4 E8 `, ^! L% L- |                                                                                        嵌入式軟件,寫代碼之前,真的不需要進(jìn)行軟件架構(gòu)設(shè)計(jì)嗎?
6 ]5 x; _9 Q7 \9 ]& E# U                                                                               
& p2 D4 Y! A; E( S8 X$ x- d! _0 \7 o                                                                        " T, }' ]' o- C% r2 O9 q
                                                                $ r4 Y" _6 S! Y/ \4 J
                                                        我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師! q! M2 [* K( i1 S; D
關(guān)注我,一起變得更加優(yōu)秀!
. T) j/ d% V# O8 }' L

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

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

本版積分規(guī)則


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