在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基本語句編程的一些規則和建議

GReq_mcu168 ? 來源:C語言與CPP編程 ? 作者:自成一派123 ? 2022-04-27 12:53 ? 次閱讀

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

基本語句編程舉例

  • if語句

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

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

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

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


	

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

其他的用法都屬于不良風格,例如:


	

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

(2)整型變量與零值比較:應當將整型變量用“==”或“!=”直接與0比較。假設整型變量的名字為value,它與零值比較的標準if語句如下:


	

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

不可以模仿布爾變量的風格而寫成:


	

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

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

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


	

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

轉化為


	

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

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

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


	

if(p == NULL) if(p != NULL) //p與NULL顯式比較,強調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的組合,應該將如下不良風格的程序:


	

if(condition) return x; return y;

改寫成


	

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

或者改成更加簡練的:


	

return(condition ?x:y);

  • 循環語句的效率

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

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

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


	

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

示例b:高效率(長循環在最內層)


	

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

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

示例c的程序比示例d多執行了 N-1 次邏輯判斷。并且由于前者老要進行邏輯判斷,打斷了循環“流水線”作業,使得編譯器不能對循環進行優化處理,降低了效率。如果 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語句的循環控制變量

不可以在for循環體內修改循環變量,防止for循環失去控制

建議for語句的循環控制變量的取值采用“半開半閉區間”寫法。

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

示例e:循環變量屬于半開半閉區間


	

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

示例f:循環變量屬于閉區間


	

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

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


	

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

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

  • goto語句

自從提倡結構化設計以來,goto 就成了有爭議的語句。

  • 由于 goto 語句可以靈活跳轉,如果不加限制,它的確會破壞結構化設計風格。

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

例如:


	

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

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

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


	

{ { { goto error; } } } error:

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

小結

主要針對if、for、while、goto、switch等基本語句使用時可能出現隱患問題,歸納了正確使用它們的一些規則和建議。如有不正之處,請留言指正!

原文標題:C語言/C++基本語句編程風格

文章出處:【微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7628

    瀏覽量

    139836
  • 編程
    +關注

    關注

    88

    文章

    3674

    瀏覽量

    94717
  • 基本語句
    +關注

    關注

    0

    文章

    4

    瀏覽量

    1100

原文標題:C語言/C++基本語句編程風格

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    PCB布線需要遵循的一些基本規則

    布線是PCB設計的重要組成部分,也是整個PCB設計中工作量最大和最耗時間的部分,工程師在進行PCB布線工作時,需要遵循一些基本的規則,如倒角規則、3W規則等。
    發表于 10-31 14:30 ?1766次閱讀

    關于編程一些問題

    開始學習編程的時候沒想那么多,可是現在編的程序大了之后開始考慮一些算法的東西 因為編程的時候都是在大腦里想的邏輯順序 然后就直接編程 可是隨著程序代碼量大了之后,自己越來越困難了
    發表于 10-30 20:59

    關于編程一些問題?

    本人對編程來說,是個小白的,請問下,我怎么能夠快速成長成為編程高手,能夠自己寫代碼的?有誰能提供一些忠實的意見的嗎?謝謝,還請過來人能夠多多談談的,謝謝,經驗分享下,不勝感激,是不
    發表于 06-03 22:35

    講解Matlab的一些編程語句

    第5章 Matlab簡易使用之常用編程語句本期教程主要是講解Matlab的一些編程語句。目錄第5章 Matlab簡易使用之常用
    發表于 08-17 07:45

    關于電源線的一些規則

    **關于過孔的大小:電源還沒學完,待續。。。。關于電源線的一些規則:待續本章的一些零碎總結:1.不改變規則前提下消除錯誤綠色提示T+M2.電源布線盡量寬
    發表于 11-11 07:09

    講解Matlab的一些編程語句

    Matlab常用的編程語句有哪些呢?怎樣去使用這些編程語句呢?
    發表于 11-18 07:30

    介紹一些常見的匯編語句

    即使使用C/C++或者其他高級語言編程,最后也會被編譯工具轉換為匯編代碼,并最終作為機器碼存儲在內存、硬盤或者其他存儲器上。在調試程序時,經常需要閱讀它的匯編代碼.這里介紹一些自己常見的匯編語句
    發表于 12-20 06:05

    PCB布板一些簡易常用規則

    PCB布板一些簡易常用規則   這幾天還是關注一些簡單入門的東西吧,主要介紹一些PCB中一些
    發表于 11-21 14:34 ?6711次閱讀

    如何使用PU學習進行建議語句分類的方法說明

    建議挖掘作為項新興研究任務,具有重要的應用價值。針對傳統建議語句分類方法所存在的規則復雜、標注工作量大、特征維度高、數據稀疏等問題,提出
    發表于 03-27 11:26 ?4次下載
    如何使用PU學習進行<b class='flag-5'>建議</b><b class='flag-5'>語句</b>分類的方法說明

    關于學習Linux的一些建議

    不管是在生活還是工作中,每個人都會逐漸養成一些小習慣。壞習慣旦形成就很難改正,所在在系統學習 Linux 之前,給大家一些建議,刻意去培養一些
    發表于 07-14 14:22 ?671次閱讀

    了解一些C程序的基本規則

    程序由個或多個函數組成,其中定有個名為 main()的函數。函數的描述由函數頭和函數體組成。函數頭包括預處理語句#include和函數名。可以通過圓括號識別
    的頭像 發表于 07-27 11:01 ?2657次閱讀
    了解<b class='flag-5'>一些</b>C程序的基本<b class='flag-5'>規則</b>

    APT觸摸布局的一些建議詳細說明

    本文檔的主要內容詳細介紹的是APT觸摸布局的一些建議詳細說明。
    發表于 10-27 08:00 ?0次下載
    APT觸摸布局的<b class='flag-5'>一些</b><b class='flag-5'>建議</b>詳細說明

    一些與眾不同的PCB布線經驗規則

    PCB設計論壇中的 遵守/避免布線法則,使得PCB設計者在這些規則也許不適用的地方要么遵守,要么忽略他們。一些情況下,這未必造成電路板設
    的頭像 發表于 11-01 10:33 ?3262次閱讀

    學習linux內核的一些建議

    學習linux內核,這個可不像學門語言,c或者java個月或者3月你就能精通掌握。學習linux內核是需要步循序漸進,掌握正確的linux內核學習路線對學習至關重要,本篇文章
    發表于 05-07 15:20 ?702次閱讀
    學習linux內核的<b class='flag-5'>一些</b><b class='flag-5'>建議</b>

    針對RF PCBA設計的一些建議

    射頻(RF)PCBA設計涉及系列復雜的考慮因素,包括天線設計、濾波器設計以及傳輸線(RF Trace)的優化。這些因素對于無線通信和射頻應用的性能至關重要。以下是針對RF PCBA設計的一些建議
    的頭像 發表于 10-30 10:19 ?670次閱讀
    主站蜘蛛池模板: 六月婷婷精品视频在线观看 | 欧美ggg| 一级毛片aaa片免费观看 | 噜噜噜色| 国产成人精品午夜二三区 | 就要爱综合 | 亚洲第一香蕉视频 | 中文字字幕码一二区 | 免费aa| 我想看三级特黄 | yy6080亚洲半夜理论一级毛片 | 色香蕉视频 | 精品一区二区三区视频 | 午夜神马福利 | 97午夜精品| 视频一区二区三区在线观看 | 久草一本 | 色操网 | 色综合成人丁香 | 波多野结衣的毛片 | 日本欧美一区二区三区免费不卡 | 99久久999久久久综合精品涩 | 国产成人精品系列在线观看 | 免费黄色大片 | 超人碰碰碰人人成碰人 | 成人久久久精品乱码一区二区三区 | 88av视频在线 | 色福利在线 | www.午夜色| 免费黄色福利视频 | 天天摸夜班摸天天碰 | 好大好硬好深好爽的视频 | 操操干 | 亚洲成av人片在线观看无码 | 在线五月婷婷 | 欧美伊人 | 狠狠色丁香婷婷第六色孕妇 | 人人艹在线 | 国产日本三级在线播放线观看 | 福利盒子手机看片 | 5月丁香6月婷婷 |