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

日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

完善資料讓更多小伙伴認識你,還能領(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語句,本文以“與零值比較”為例,進行討論。

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

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

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

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

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

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

(2)整型變量與零值比較:應(yīng)當將整型變量用“==”或“!=”直接與0比較。假設(shè)整型變量的名字為value,它與零值比較的標準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)當將指針變量用“==”或“!=”與NULL比較。

指針變量的零值是“空”(記NULL)。盡管NULL的值與0相同,但二者的意義不同。假設(shè)指針變量名p,它與零值比較的標準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顛倒。編譯器認為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)當將最長的循環(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 次邏輯判斷。并且由于前者老要進行邏輯判斷,打斷了循環(huán)“流水線”作業(yè),使得編譯器不能對循環(huá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)注

    183

    文章

    7648

    瀏覽量

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

    關(guān)注

    90

    文章

    3725

    瀏覽量

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

    關(guān)注

    0

    文章

    616

    瀏覽量

    29594

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    C++與lua聯(lián)合編程

    手工業(yè)”。然而,這兩種內(nèi)存管理機制截然不同的語言,如何在一個進程內(nèi)進行高效的數(shù)據(jù)交換,一直是企業(yè)級開發(fā)中的痛點。(看讠果aixuetang。xyz) 從經(jīng)濟學(xué)的視角來審視,夏曹俊老師《C++ 腳本編程
    發(fā)表于 04-19 16:27

    C++:const 的空間,常量也能占內(nèi)存?

    ] != BLACK)): return True return False c++語言5g.FsW.dgdfgsg.cnJIWWQc++語言 c++
    發(fā)表于 04-16 19:19

    汽車網(wǎng)絡(luò)安全開發(fā)語言選型指南:C/C++/Rust/Java等主流語言對比+Perforce QAC/Klocwork工具支持

    汽車網(wǎng)絡(luò)安全如何選編程語言?C、C++、Rust、Java……誰更適合AUTOSAR、ISO/SAE 21434?一文了解8種主流語言的優(yōu)劣
    的頭像 發(fā)表于 12-26 11:13 ?697次閱讀
    汽車網(wǎng)絡(luò)安全開發(fā)<b class='flag-5'>語言</b>選型指南:<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>/Rust/Java等主流<b class='flag-5'>語言</b>對比+Perforce QAC/Klocwork工具支持

    C語言C++的區(qū)別及聯(lián)系

    C語言C++到底是什么關(guān)系? 首先C++C語言本來就是兩種不同的
    發(fā)表于 12-24 07:23

    CC++之間的聯(lián)系

    控制能力,這一點與C語言相似,使得它們在系統(tǒng)編程、嵌入式系統(tǒng)等領(lǐng)域都得到廣泛應(yīng)用。 3、發(fā)展歷程: C++正是在C
    發(fā)表于 12-11 06:51

    C語言C++之間的區(qū)別是什么

    區(qū)別 1、面向?qū)ο?b class='flag-5'>編程 (OOP): C語言是一種面向過程的語言,它強調(diào)的是通過函數(shù)將任務(wù)分解為一系列步驟進行執(zhí)行。 C++
    發(fā)表于 12-11 06:23

    如何調(diào)試和編程CW32F030C8T7?支持哪些調(diào)試工具和編程語言

    了解如何調(diào)試和編程CW32F030C8T7是開發(fā)過程中的重要環(huán)節(jié)。它支持哪些調(diào)試工具(如JTAG、串口調(diào)試等)和編程語言(如C、
    發(fā)表于 12-05 06:48

    C語言編程技巧

    設(shè)計,分層開發(fā)代碼,便于理解和維護。 ?8、避免使用GOTO語句?:盡管GOTO語句在某些情況下仍然有用,但現(xiàn)代編程更傾向于使用函數(shù)和循環(huán)控制結(jié)構(gòu),以提高代碼的可讀性和維護性。 ?9、利用C
    發(fā)表于 11-27 06:46

    C語言和單片機C語言有什么差異

    區(qū)別是由編譯器決的,只能參考對應(yīng)的編譯手冊,即使同種平臺不同的編譯器對C的擴展也有不同。 3、單片機c語言編程是基于C
    發(fā)表于 11-14 07:55

    第4章 C語言基礎(chǔ)以及流水燈的實現(xiàn)(4.5 4.6)

    4.5while循環(huán)語句 在單片機C語言編程的時候,每個程序都會固定的加一句while(1),這條語句就可以起到死循環(huán)的作用。對于while
    的頭像 發(fā)表于 11-06 11:21 ?559次閱讀

    技能+1!如何在樹莓派上使用C++控制GPIO?

    在使用樹莓派時,你會發(fā)現(xiàn)Python和Scratch是許多任務(wù)(包括GPIO編程)中最常用的編程語言。但你知道嗎,你也可以使用C++進行GPIO編程
    的頭像 發(fā)表于 08-06 15:33 ?4556次閱讀
    技能+1!如何在樹莓派上使用<b class='flag-5'>C++</b>控制GPIO?

    C++ 與 Python:樹莓派上哪種語言更優(yōu)?

    Python是樹莓派上的首選編程語言,我們的大部分教程都使用它。然而,C++在物聯(lián)網(wǎng)項目中同樣廣受歡迎且功能強大。那么,在樹莓派項目中選擇哪種語言更合適呢?Python因其簡潔性、豐富
    的頭像 發(fā)表于 07-24 15:32 ?1162次閱讀
    <b class='flag-5'>C++</b> 與 Python:樹莓派上哪種<b class='flag-5'>語言</b>更優(yōu)?

    《ESP32S3 Arduino開發(fā)指南》第三章 C/C++語言基礎(chǔ)

    第三章 C/C++語言基礎(chǔ) C/C++語言是國際上廣泛流行的計算機高級
    發(fā)表于 06-10 09:20

    詳解TIA Portal SCL編程語言中的IF語句

    IF 語句編程中最基本和最重要的控制結(jié)構(gòu)之一,它的主要作用是根據(jù)條件決定程序的執(zhí)行路徑,IF 語句編程中實現(xiàn)邏輯判斷和決策的基礎(chǔ)。
    的頭像 發(fā)表于 05-24 15:01 ?2229次閱讀
    詳解TIA Portal SCL<b class='flag-5'>編程</b><b class='flag-5'>語言</b>中的IF<b class='flag-5'>語句</b>

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

    在單片機的地界兒里,C語言穩(wěn)坐中軍帳,C++想分杯羹?難嘍。咱電子工程師天天跟那針尖大的內(nèi)存空間較勁,C++那些花里胡哨的玩意兒,在這兒真玩不轉(zhuǎn)。先說內(nèi)存這道坎兒。您當stm32f4的
    的頭像 發(fā)表于 05-21 10:33 ?1256次閱讀
    主流的 MCU 開發(fā)<b class='flag-5'>語言</b>為什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?
    西平县| 喀喇沁旗| 常宁市| 含山县| 闽侯县| 张家口市| 清水县| 怀柔区| 井陉县| 扶风县| 永州市| 嵩明县| 沾化县| 绍兴县| 阳西县| 襄汾县| 大石桥市| 禹城市| 伊宁市| 称多县| 元谋县| 壶关县| 吉隆县| 保德县| 鹤峰县| 交城县| 定兴县| 长垣县| 永善县| 镇平县| 洛川县| 遵义市| 山东| 石城县| 秦安县| 高邑县| 若尔盖县| 南靖县| 中超| 若尔盖县| 仪征市|