www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > 嵌入式客棧
[導讀]關注、星標 嵌入式客棧 ,干貨及時送達 [導讀] 喜聞C語言重登王座,作為一個C語言用的相對較多的碼農,還是有點興奮。本文來聊一聊,你可能沒在意的C語言中return的一些使用技巧,分享給大家。 return是啥 return其英文含義就是返回,用在函數中,退出當前函

關注、星標 嵌入式客棧 ,干貨及時送達

[導讀] 喜聞C語言重登王座,作為一個C語言用的相對較多的碼農,還是有點興奮。本文來聊一聊,你可能沒在意的C語言中return的一些使用技巧,分享給大家。

return是啥

return其英文含義就是返回,用在函數中,退出當前函數。這個想必都知道,分兩種情況:

  • 函數不帶返回值時,如
void func(void)
{
   /*功能代碼*/
   ...
   return;
}

對于不帶返回值函數返回,其語法為 return;對于void函數,通常不顯式加return語句,程序會自動返回到其調用者現場。

所以上述函數如下改寫一下,效果是一樣的:

void func(void)
{
   /*功能代碼*/
   ...
}
  • 函數帶返回值,如
int add(int a, int b)
{
    int result = a+b;
    return result;
}

對于帶返回值函數返回,其語法為 return <value>;返回值可以是一些幾種情況:

  • 一個常數
  • 一個變量
  • 計算式,例如(a + b)* c
  • 調用另一個返回值的函數

注意:返回值的類型須與函數返回值類型一致,如不一致,編譯器會自動做類型轉換,這里容易出現類型轉換的錯誤

上代碼:

/*Case 1,返回常量*/
/*返回常量,-1表示參數非法,0表示成功*/
int swap(int *a, int *b)
{
    int temp;
    if(a==NULL || b==NULL)
        return -1;
    else
    {
        temp = *a;
        *a = *b;
        *b = temp;
        return 0;
    }
}

/*Case 2:返回一個變量*/
int add(int a, int b)
{
    int result = a+b;
    return result;
}

/* Case 3:返回一個表達式,add函數改寫一下*/
int add(int a, int b)
{
    return (a+b);
}

/* Case 4:返回一個函數調用 */
/*STM32編程:是時候深入理解棧文章中提到的遞歸計算階乘*/
float factorial(uint32_t n)
{
    uint32_t sp = __get_MSP();    
    /*記錄棧指針的變化情況*/
    spSatte[spIndex++] = sp;
    if(n==0 || n==1)
        return 1;
    else
        return (float)n*factorial(n-1);
}

return 咋工作的?

首先需要了解函數調用是如何工作的。當調用一個函數時,會發(fā)生兩件事:

  1. 當前函數的執(zhí)行暫停。
  2. 調用的函數執(zhí)行。

這就是所謂的的控制權轉移。當調用一個函數時,程序的控制從調用函數轉移到被調用函數。return語句將控制權返回到前一個調用它的函數。該函數將從暫停的地方繼續(xù)執(zhí)行。

在調用處,如果查看匯編代碼,單片機或處理器會將當前CPU的PC指針、臨時變量、相關寄存器壓棧,調用函數返回時,會將棧的內容彈出到相應的寄存器或者臨時變量,以恢復現場。關于棧的解釋可以參見號內文章:<<STM32編程:是時候深入理解棧>>

void 函數真不需要加return嗎?

事實上不然,這就是本文希望引起注意的一些要點,在哪些場景下需要顯式的對void函數添加return語句呢?

  • 傳入指針為空指針,這也是很多面試官會考察的要點之一,這樣處理會增強程序的健壯性。
void swap(int *a, int *b)
{
    int temp;
    /*不可操作空指針*/
    if(a==NULL || b==NULL)
        return ;
    else
    {
        temp = *a;
        *a = *b;
        *b = temp;
    }
}

  • 傳入參數非法或者越界
enum E_DAY{ 
    E_MON=0
    E_TUS,
    E_WNd, 
    E_THR,
    E_FRD, 
    E_SAT, 
    E_SUN 
};
void set_day(E_DAY day,E_DAY *pDay)

    /* 這里就需要判別day參數是否非法越界 */
    if(day>E_SUN || day<E_MON || pDay ==NULL)
     return;
     
    *pDay = day;
}
  • 檢測到異常時需立即退出當前程序的執(zhí)行流。
void func(void)
{
    FILE *pFile=fopen("./test.csv","wt+");
    /*這里就檢測到文件無法打開的異常,則需要馬上退出*/
    if(pFile==NULL)
    {
        printf("file opened failed");
        return ;
    }

    .....

    fclose(pFile);
}

總結一下

因為容易忽略,其實也是初學者可能不太注意的一些地方,所以在此總結一下:

  • return的具體做了什么,其內在工作原理需要棧的支持
  • 不帶返回值的函數,可不加return語句
  • 帶返回值的函數,注意返回值的類型與函數返回值類型一致
  • void函數,在一些特定的場合加上return語句,可增加程序的健壯性:
    • 傳入指針為空指針
    • 傳入參數非法或者越界
    • 檢測到異常時需立即退出當前程序的執(zhí)行流
    • 其實非void函數,也墻裂建議這么處理。

END

果喜歡右下點個在看,也會讓我倍感鼓舞

往期精彩推薦,點擊即可閱讀




▲抽象思想解讀Linux進程描述符
讀U-Boot源碼-C語言編程大法總結篇一
讀U-Boot源碼-C語言編程技巧總結篇二
基于Buildroot的Linux構建之根文件系統(tǒng)
手把手教系列之移動平均濾波器C實現
手把手教系列之IIR數字濾波器設計實現

關注置頂:掃描左下二維碼關注公眾號加星

加群交流:掃描右下二維碼添加,發(fā)送“加群”

關注

加群

免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯合牽頭組建的NVI技術創(chuàng)新聯盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉