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

色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

GReq_mcu168 ? 來源:玩轉(zhuǎn)單片機(jī) ? 2020-08-05 11:03 ? 次閱讀

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

基本語(yǔ)句編程舉例

if語(yǔ)句

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

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

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

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

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語(yǔ)句如下:

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

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

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

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

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

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

轉(zhuǎn)化為

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

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

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

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

不要寫成:

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

或者

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

(5)對(duì)if語(yǔ)句的補(bǔ)充說明

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

if(condition) return x; return y;

改寫成

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

或者改成更加簡(jiǎn)練的:

return(condition ?x:y);

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

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

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

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

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

示例b:高效率(長(zhǎng)循環(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è),使得編譯器不能對(duì)循環(huán)進(jìn)行優(yōu)化處理,降低了效率。如果 N 非常大,最好采用示例 d的寫法,可以提高效率。如果 N 非常小,兩者效率差別并不明顯,采用示例 c的寫法比較好,因?yàn)槌绦蚋雍?jiǎn)潔。

示例c:效率低但程序簡(jiǎn)潔

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

示例d:效率高但程序不簡(jiǎn)潔

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

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

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

建議for語(yǔ)句的循環(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語(yǔ)句switch是多分支選擇語(yǔ)句,而if語(yǔ)句只有兩個(gè)分支可供選擇。雖然可以用嵌套的if語(yǔ)句來實(shí)現(xiàn)多分支選擇,但那樣的程序冗長(zhǎng)難讀。switch 語(yǔ)句基本格式:

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

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

goto語(yǔ)句

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

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

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

例如:

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

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

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

{ { { goto error; } } } error:

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

小結(jié)

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

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

    關(guān)注

    180

    文章

    7608

    瀏覽量

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

    關(guān)注

    88

    文章

    3627

    瀏覽量

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

    關(guān)注

    0

    文章

    613

    瀏覽量

    28404

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    NPU支持的編程語(yǔ)言有哪些

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

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

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

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

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

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

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

    Orin芯片的編程語(yǔ)言支持

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

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

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

    PLC編程語(yǔ)言C語(yǔ)言的區(qū)別

    在工業(yè)自動(dòng)化和計(jì)算機(jī)編程領(lǐng)域中,PLC(可編程邏輯控制器)編程語(yǔ)言C語(yǔ)言各自扮演著重要的角色。
    的頭像 發(fā)表于 06-14 17:11 ?2928次閱讀

    為什么很少用C++開發(fā)單片機(jī)

    C語(yǔ)言是面向過程的語(yǔ)言,C++是面向?qū)ο蟮?b class='flag-5'>編程語(yǔ)言。結(jié)合本文來說,面向過程相比面向?qū)ο蟮?/div>
    發(fā)表于 03-25 14:26 ?1045次閱讀
    為什么很少用<b class='flag-5'>C++</b>開發(fā)單片機(jī)

    C語(yǔ)言#define的應(yīng)用

    C/C++ 編程語(yǔ)言中,當(dāng)程序被編譯時(shí),被發(fā)送到編譯器,編譯器將程序轉(zhuǎn)換為機(jī)器語(yǔ)言,然后完成編譯并執(zhí)行該程序。預(yù)處理器也稱為宏預(yù)處理器。
    發(fā)表于 03-06 11:29 ?393次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>#define的應(yīng)用

    plc編程語(yǔ)言c語(yǔ)言的聯(lián)系 c語(yǔ)言和PLC有什么區(qū)別

    語(yǔ)言,主要用于開發(fā)各種應(yīng)用程序。盡管PLC編程語(yǔ)言C語(yǔ)言有一些相似之處,但它們之間也存在一些明顯的區(qū)別。 首先,PLC
    的頭像 發(fā)表于 02-05 14:21 ?4210次閱讀

    c語(yǔ)言,c++,java,python區(qū)別

    C語(yǔ)言、C++、Java和Python是四種常見的編程語(yǔ)言,各有優(yōu)點(diǎn)和特點(diǎn)。 C
    的頭像 發(fā)表于 02-05 14:11 ?2453次閱讀

    vb語(yǔ)言c++語(yǔ)言的區(qū)別

    VB語(yǔ)言C++語(yǔ)言是兩種不同的編程語(yǔ)言,雖然它們都屬于高級(jí)編程
    的頭像 發(fā)表于 02-01 10:20 ?2379次閱讀

    深入探討嵌入式C編程的goto語(yǔ)句

    什么是goto語(yǔ)句? goto 語(yǔ)句被稱為 C 語(yǔ)言中的跳轉(zhuǎn)語(yǔ)句。 用于無條件跳轉(zhuǎn)到其他標(biāo)簽。它將控制權(quán)轉(zhuǎn)移到程序的其他部分。
    發(fā)表于 01-21 10:41 ?622次閱讀
    深入探討嵌入式<b class='flag-5'>C</b><b class='flag-5'>編程</b>的goto<b class='flag-5'>語(yǔ)句</b>

    C++簡(jiǎn)史:C++是如何開始的

    的 MISRA C++:2023 博客系列的第二部分。 在這篇博客中,我們將深入探討 C++ 的歷史、編程語(yǔ)言多年來的發(fā)展歷程以及它的下一步發(fā)展方向。
    的頭像 發(fā)表于 01-11 09:00 ?622次閱讀
    <b class='flag-5'>C++</b>簡(jiǎn)史:<b class='flag-5'>C++</b>是如何開始的
    主站蜘蛛池模板: 日本大尺码喷液过程视频| JAPANBABES11学生老师| 杨幂被视频在线观看| 国产亚洲精品99一区二区| 午夜亚洲动漫精品AV网站| 国产午夜人做人免费视频中文| 性派对xxxhd| 最近高清日本免费| 亚洲爆乳无码精品AAA片蜜桃| 小sao货ji巴cao死你视频| 消息称老熟妇乱视频一区二区| 忘忧草研究院一二三| 亚洲 欧美 国产 视频二区| 亚洲黄色大片| 伊人AV一区二区三区夜色撩人| 永久免费无码AV国产网站| 最美白嫩的极品美女ASSPICS| 亚洲午夜久久久精品影院| 国产美女视频一区二区二三区| 亚洲 欧洲 国产 日产 综合| 精品久久日日躁夜夜躁AV| 亚洲第一天堂无码专区| 国产不卡无码高清视频| 亚洲福利区| 麻豆沈芯语| 国产精品成人久久久久A伋 | 浪潮色诱AV久久久久久久| 午夜福利免费0948视频| 美女教师朝桐光在线播放| 国产免费麻传媒精品国产AV| 99久久国产极品蜜臀AV酒店| 亚洲美女视频高清在线看| 日韩熟女精品一区二区三区| 青青草原直播| 色狗av影院| 中文视频在线| 高傲教师麻麻被同学调教123| 久久精品综合网中文字幕| JAPANBABES11学生老师| 玩50岁四川熟女大白屁股直播| 男女又黄又刺激B片免费网站 |