=”或“<=”形式。" />

99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言/C++基本語句編程風(fēng)格

GReq_mcu168 ? 來源:玩轉(zhuǎn)單片機 ? 2020-08-05 11:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

初學(xué)者階段編程時,編寫基本語句可能會有隱含錯誤的方式,基本語句主要針對if、for、while、goto、switch等,它們看似簡單,但使用時隱患比較多,本文歸納了使用語句的一些規(guī)則和建議。

基本語句編程舉例

if語句

if語句是C++/C語言中最簡單、最常用的語句,然而很多編程人員用隱含錯誤的方式寫if語句,本文以“與零值比較”為例,進(jìn)行討論。

(1)布爾變量與零值比較:不可將布爾變量直接與TRUE、FALSE或者1、0比較。根據(jù)布爾類型的語義,零值為“假”(記為FALSE),任何非零值都是“真”(記為TRUE)。TRUE的值究竟是什么并沒有統(tǒng)一的標(biāo)準(zhǔn),

例如VC++將TRUE定義為1,而VB則將TRUE定義為-1。

假設(shè)布爾變量名為flag,它與零值比較的標(biāo)準(zhǔn)if語句如下

if(flag)//表示flag為真 if(!flag) //表示flag為假

其他的用法都屬于不良風(fēng)格,例如:

if(flag == TRUE) if(flag == FALSE) if(flag == 1 ) if(flag == 0 )

(2)整型變量與零值比較:應(yīng)當(dāng)將整型變量用“==”或“!=”直接與0比較。假設(shè)整型變量的名字為value,它與零值比較的標(biāo)準(zhǔn)if語句如下:

if(value == 0) if(value != 0)

不可以模仿布爾變量的風(fēng)格而寫成:

if(value) if(!value) //會讓人誤解value是布爾變量

(3)浮點變量與零值比較:不可以將浮點變量用“==”或“!=”與任何數(shù)字比較。

千萬留意,無論是float還是double類型的變量,都有精度限制,所以一定要避免將浮點變量用“==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“<=”形式。假設(shè)浮點變量的名字為x,應(yīng)該將

if(x == 0.0) //隱含錯誤的比較

轉(zhuǎn)化為

if((x >= -EPSINON) && (x <= EPSINON)) //其中EPSINON是允許的誤差(即精度)。

(4)指針變量與零值比較:應(yīng)當(dāng)將指針變量用“==”或“!=”與NULL比較。

指針變量的零值是“空”(記NULL)。盡管NULL的值與0相同,但二者的意義不同。假設(shè)指針變量名p,它與零值比較的標(biāo)準(zhǔn)if語句如下:

if(p == NULL) if(p != NULL) //p與NULL顯式比較,強調(diào)p是指針變量

不要寫成:

if(p == 0) if(p != 0) //容易讓人誤解p是整型變量

或者

if(p) if(!p) //容易讓人誤解p是布爾變量

(5)對if語句的補充說明

有時候可能會看到if(NULL == p)這樣古怪的格式。這樣寫能夠防止將if(p == NULL)誤寫成if(p = NULL),而有意將p和NULL顛倒。編譯器認(rèn)為if(p = NULL)是合法的,但會指出if(NULL = p)是錯誤的,因為NULL不能被賦值。程序中有時會遇到if/else/return的組合,應(yīng)該將如下不良風(fēng)格的程序:

if(condition) return x; return y;

改寫成

if(condition) { return x; } else { return y; }

或者改成更加簡練的:

return(condition ?x:y);

循環(huán)語句的效率

C++/C循環(huán)語句中,for語句使用頻率最高,while語句其次,do語句很少用。提高循環(huán)體效率的基本方法是降低循環(huán)體的復(fù)雜性。

(1)在多重循環(huán)中,如果有可能,應(yīng)當(dāng)將最長的循環(huán)放在最內(nèi)層,最短的循環(huán)放在最外層,以減少CPU跨切循環(huán)層的次數(shù)。例如下面代碼示例b的效率就比示例a的高。

示例a:低效率(長循環(huán)在最外層)

for(row = 0; row < 100; row++) { for(col=0;col<5;col++) { sum = sum +a[row][col]; } }

示例b:高效率(長循環(huán)在最內(nèi)層)

for(col = 0; col < 5; col++) { for(row=0;row<100;row++) { sum = sum +a[row][col]; } }

(2)如果循環(huán)體內(nèi)存在邏輯判斷,并且循環(huán)次數(shù)很大,宜將邏輯判斷移到循環(huán)體的外面。

示例c的程序比示例d多執(zhí)行了 N-1 次邏輯判斷。并且由于前者老要進(jìn)行邏輯判斷,打斷了循環(huán)“流水線”作業(yè),使得編譯器不能對循環(huán)進(jìn)行優(yōu)化處理,降低了效率。如果 N 非常大,最好采用示例 d的寫法,可以提高效率。如果 N 非常小,兩者效率差別并不明顯,采用示例 c的寫法比較好,因為程序更加簡潔。

示例c:效率低但程序簡潔

for(i = 0; i < N; i++) { if(condition) DoSomthing(); else DoSomthing(); }

示例d:效率高但程序不簡潔

if (condition) { for (i=0; i

(3)for語句的循環(huán)控制變量

不可以在for循環(huán)體內(nèi)修改循環(huán)變量,防止for循環(huán)失去控制。

建議for語句的循環(huán)控制變量的取值采用“半開半閉區(qū)間”寫法。

示例e中的x值屬于半開半閉區(qū)間“0=

示例e:循環(huán)變量屬于半開半閉區(qū)間

for(int x = 0;x < N; x++) { }

示例f:循環(huán)變量屬于閉區(qū)間

for(int x = 0;x <= N-1; x++) { }

switch語句switch是多分支選擇語句,而if語句只有兩個分支可供選擇。雖然可以用嵌套的if語句來實現(xiàn)多分支選擇,但那樣的程序冗長難讀。switch 語句基本格式:

switch(variable) { case value1: break; case value2: break; default: break; }

每個 case 語句的結(jié)尾不要忘了加 break,否則將導(dǎo)致多個分支重疊(除非有意使多個分支重疊)。不要忘記最后那個 default 分支,即使程序真的不需要 default 處理,也應(yīng)該保留語句 default : break; 這樣做并非多此一舉,而是為了防止別人誤以為你忘了 default 處理。

goto語句

自從提倡結(jié)構(gòu)化設(shè)計以來,goto 就成了有爭議的語句。

由于 goto 語句可以靈活跳轉(zhuǎn),如果不加限制,它的確會破壞結(jié)構(gòu)化設(shè)計風(fēng)格。

goto 語句經(jīng)常帶來錯誤或隱患。它可能跳過了某些對象的構(gòu)造、變量的初始化、重要的計算等語句,

例如:

goto state; String s1, s2; // 被 goto 跳過 int sum = 0; // 被 goto 跳過 state:

如果編譯器不能發(fā)覺此類錯誤,每用一次 goto 語句都可能留下隱患。很多人建議廢除 C++/C 的 goto 語句,以絕后患。

但實事求是地說,錯誤是程序員自己造成的,不是 goto 的過錯。goto 語句至少有一處可顯神通,它能從多重循環(huán)體中一下子跳到外面,用不著寫很多次的 break 語句;例如:

{ { { goto error; } } } error:

就像樓房著火了,來不及從樓梯一級一級往下走,可從窗口跳出火坑,所以我們主張少用、慎用 goto 語句,而不是禁用。

小結(jié)

主要針對if、for、while、goto、switch等基本語句使用時可能出現(xiàn)隱患問題,歸納了正確使用它們的一些規(guī)則和建議。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141616
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3689

    瀏覽量

    95225
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    614

    瀏覽量

    28944

原文標(biāo)題:C語言/C++基本語句編程風(fēng)格

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    主流的 MCU 開發(fā)語言為什么是 C 而不是 C++?

    在單片機的地界兒里,C語言穩(wěn)坐中軍帳,C++想分杯羹?難嘍。咱電子工程師天天跟那針尖大的內(nèi)存空間較勁,C++那些花里胡哨的玩意兒,在這兒真玩不轉(zhuǎn)。先說內(nèi)存這道坎兒。您當(dāng)stm32f4的
    的頭像 發(fā)表于 05-21 10:33 ?436次閱讀
    主流的 MCU 開發(fā)<b class='flag-5'>語言</b>為什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?

    單片機c語言編程實例大全

    單片機c語言編程實例大全_18
    發(fā)表于 04-30 16:11 ?3次下載

    深入理解C語言C語言循環(huán)控制

    C語言編程中,循環(huán)結(jié)構(gòu)是至關(guān)重要的,它可以讓程序重復(fù)執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進(jìn)入無限循環(huán),C
    的頭像 發(fā)表于 04-29 18:49 ?1124次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環(huán)控制

    Spire.XLS for C++組件說明

    開發(fā)人員可以快速地在 C++ 平臺上完成對 Excel 的各種編程操作,如根據(jù)模板創(chuàng)建新的 Excel 文檔,編輯現(xiàn)有 Excel 文檔,以及對 Excel 文檔進(jìn)行轉(zhuǎn)換。 Spire.XLS
    的頭像 發(fā)表于 01-14 09:40 ?616次閱讀
    Spire.XLS for <b class='flag-5'>C++</b>組件說明

    AKI跨語言調(diào)用庫神助攻C/C++代碼遷移至HarmonyOS NEXT

    )開發(fā)框架。它極大地簡化了JS與C/C++之間的跨語言訪問,為開發(fā)者提供了一種邊界性編程體驗友好的解決方案。通過AKI,開發(fā)者可以使用讓代碼更易讀的語法糖,實現(xiàn)JS與
    發(fā)表于 01-02 17:08

    深入理解C語言:循環(huán)語句的應(yīng)用與優(yōu)化技巧

    在程序設(shè)計中,我們常常需要重復(fù)執(zhí)行某一段代碼。為了提高效率和簡化代碼,循環(huán)語句應(yīng)運而生。C語言作為一門經(jīng)典的編程語言,提供了多種循環(huán)控制結(jié)構(gòu)
    的頭像 發(fā)表于 12-07 01:11 ?628次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:循環(huán)<b class='flag-5'>語句</b>的應(yīng)用與優(yōu)化技巧

    NPU支持的編程語言有哪些

    與NPU一起使用: C/C++CC++是性能要求較高的應(yīng)用的首選語言,尤其是在需要直接與硬件交互的場景中。許多NPU硬件都提供了
    的頭像 發(fā)表于 11-15 09:21 ?1911次閱讀

    技術(shù)干貨驛站 ▏深入理解C語言:掌握C語言條件判斷,從if到switch的應(yīng)用

    編程中,條件判斷語句是控制程序流程的核心元素之一。它們使得程序能夠根據(jù)不同的輸入和狀態(tài),做出相應(yīng)的決策。特別是在C語言中,條件判斷語句的使
    的頭像 發(fā)表于 11-09 01:10 ?862次閱讀
    技術(shù)干貨驛站 ▏深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:掌握<b class='flag-5'>C</b><b class='flag-5'>語言</b>條件判斷,從if到switch的應(yīng)用

    C語言中的socket編程基礎(chǔ)

    Socket編程簡介 Socket是一種通信機制,允許程序之間進(jìn)行通信。在C語言中,socket編程是網(wǎng)絡(luò)編程的基礎(chǔ)。通過使用socket,
    的頭像 發(fā)表于 11-01 16:51 ?1221次閱讀

    C語言C++中結(jié)構(gòu)體的區(qū)別

    同樣是結(jié)構(gòu)體,看看在C語言C++中有什么區(qū)別?
    的頭像 發(fā)表于 10-30 15:11 ?763次閱讀

    C7000優(yōu)化C/C++編譯器

    電子發(fā)燒友網(wǎng)站提供《C7000優(yōu)化C/C++編譯器.pdf》資料免費下載
    發(fā)表于 10-30 09:45 ?0次下載
    <b class='flag-5'>C</b>7000優(yōu)化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>編譯器

    C語言與其他編程語言的比較

    C語言作為一種歷史悠久的編程語言,自其誕生以來,一直在軟件開發(fā)領(lǐng)域扮演著重要角色。它以其高效、靈活和可移植性強的特點,成為了系統(tǒng)級編程的首選
    的頭像 發(fā)表于 10-29 17:30 ?1070次閱讀

    Orin芯片的編程語言支持

    語言支持 Orin芯片支持多種編程語言,以滿足不同開發(fā)者的需求。其中,C/C++和Python是兩種廣泛應(yīng)用的
    的頭像 發(fā)表于 10-27 16:45 ?981次閱讀

    C++語言基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《C++語言基礎(chǔ)知識.pdf》資料免費下載
    發(fā)表于 07-19 10:58 ?10次下載

    C++中實現(xiàn)類似instanceof的方法

    函數(shù),可實際上C++中沒有。但是別著急,其實C++中有兩種簡單的方法可以實現(xiàn)類似Java中的instanceof的功能。 在 C++ 中,確定對象的類型是編程中實際需求,使開發(fā)人員
    的頭像 發(fā)表于 07-18 10:16 ?935次閱讀
    <b class='flag-5'>C++</b>中實現(xiàn)類似instanceof的方法