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

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

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

3天內不再提示

哪些場景下需要顯式的對void函數添加return語句呢?

GReq_mcu168 ? 來源:玩轉單片機 ? 作者:玩轉單片機 ? 2020-06-24 11:54 ? 次閱讀

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 咋工作的?首先需要了解函數調用是如何工作的。當調用一個函數時,會發生兩件事:

當前函數的執行暫停。

調用的函數執行。

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

在調用處,如果查看匯編代碼,單片機處理器會將當前CPU的PC指針、臨時變量、相關寄存器壓棧,調用函數返回時,會將棧的內容彈出到相應的寄存器或者臨時變量,以恢復現場。

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;

檢測到異常時需立即退出當前程序的執行流。

void func(void)

FILE *pFile=fopen(“。/test.csv”,“wt+”);

/*這里就檢測到文件無法打開的異常,則需要馬上退出*/

if(pFile==NULL)

printf(“file opened failed”);

return ;

fclose(pFile);

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

return的具體做了什么,其內在工作原理需要棧的支持

不帶返回值的函數,可不加return語句

帶返回值的函數,注意返回值的類型與函數返回值類型一致

void函數,在一些特定的場合加上return語句,可增加程序的健壯性:

傳入指針為空指針

傳入參數非法或者越界

檢測到異常時需立即退出當前程序的執行流

其實非void函數,也墻裂建議這么處理。
責任編輯:pj

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

    關注

    11

    文章

    1859

    瀏覽量

    32409
  • void
    +關注

    關注

    0

    文章

    23

    瀏覽量

    9897
  • Return
    +關注

    關注

    0

    文章

    9

    瀏覽量

    7637
收藏 人收藏

    評論

    相關推薦

    C語言如何處理函數的返回值

    當你在函數的最后寫上 return 0 的時候,它是如何返回給調用函數的? 比如 test 函數,為了待會更好的看懂匯編代碼,我寫成了 return
    的頭像 發表于 01-16 09:21 ?77次閱讀

    javascript:void(0) 的作用是什么

    = "javascript:void(0)" onclick = "doSomething()" > Click me a > 在這個例子中,點擊鏈接時不會跳轉,而是執行 doSomething() 函數。 占位符 : 在某
    的頭像 發表于 12-31 15:55 ?296次閱讀

    SUMIF函數的應用場景分析

    SUMIF函數在Excel中是一個強大的數據分析工具,特別適用于需要對數據進行條件篩選并求和的場景。以下是對SUMIF函數應用場景的分析:
    的頭像 發表于 10-30 09:55 ?444次閱讀

    【「嵌入Hypervisor:架構、原理與應用」閱讀體驗】+ Hypervisor應用場景調研

    繼續研讀《嵌入Hypervisor:架構、原理與應用》,想搞清楚Hypervisor的具體應用場景,是否能用于我們的嵌入產品設計。 通過閱讀“Hypervisor類型和產品”一節,知道了
    發表于 10-14 11:21

    脈沖線圈測試儀的技術原理和應用場景

    能是否良好。電暈放電是絕緣不良的一種表現,通過檢測電暈放電的發生,測試儀能夠及時發現并定位絕緣問題。 應用場景脈沖線圈測試儀廣泛應用于各種需要檢測線圈質量的場景,包括但不限于: 電機
    發表于 09-18 14:29

    HarmonyOS Next原生應用開發-從TS到ArkTS的適配規則(十六)

    一、限制省略函數返回類型標注 規則:arkts-no-implicit-return-types 級別:錯誤 ArkTS在部分場景中支持對函數返回類型進行推斷。當
    發表于 08-20 14:08

    面試常考+1:函數指針與指針函數、數組指針與指針數組

    在嵌入開發領域,函數指針、指針函數、數組指針和指針數組是一些非常重要但又容易混淆的概念。理解它們的特性和應用場景,對于提升嵌入程序的效率
    的頭像 發表于 08-10 08:11 ?986次閱讀
    面試常考+1:<b class='flag-5'>函數</b>指針與指針<b class='flag-5'>函數</b>、數組指針與指針數組

    HarmonyOS Next原生應用開發-從TS到ArkTS的適配規則(九)

    函數,編譯器將自動添加一個默認構造函數。 } functiongetPoint(o: Point): Point { return o; } // 字面量初始化
    發表于 07-25 11:26

    看見很多函數前加了void ICACHE_FLASH_ATTR,這句是什么意思?

    看見很多函數前加了void ICACHE_FLASH_ATTR,這句是什么意思?什么情況需要加上ICACHE_FLASH_ATTR。
    發表于 07-22 06:45

    HarmonyOS實戰開發-合理選擇條件渲染和隱控制

    通過條件渲染或隱控制,實現組件的顯示和隱藏間的切換,兩者的適用場景分別如下: 條件渲染的適用場景: 在應用冷啟動階段,應用加載繪制首頁時,如果組件初始不需要顯示,建議使用條件渲染替
    發表于 05-10 15:16

    stm32f030從return跳出會死在void HardFault_Handler(void)的原因?怎么解決?

    第一層就死在void HardFault_Handler(void)了 case 10: { delay_ms (10);//消抖 return; }
    發表于 04-24 08:21

    C語言函數指針六大應用場景詳解

    函數指針是一種非常強大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 6 個函數指針的高級應用場景,并貼出相應的代碼案例和解釋。
    的頭像 發表于 04-23 18:19 ?958次閱讀

    STM32CUBEMX4.22.1在main函數里面添加一行語句就死機的原因?

    用STM32CUBEMX4.22.1版本,內嵌FREERTOS,想把4路ADC通過DMA方式采集,但是在main函數里面添加一行語句:HAL_ADC_Start_DMA( hadc1, ADC_DMA_Buf[0],4);后就死
    發表于 04-11 07:57

    在stm32f1xx_ll_utils.c中提供的延時函數,以下標紅語句為什么要多加1

    在stm32f1xx_ll_utils.c中提供的延時函數,以下標紅語句為什么要多加1?延時1ms不就變成2ms了嗎? void LL_mDelay(uint32_t Delay)
    發表于 03-26 06:08

    assign語句和always語句的用法

    ," "是要賦值的信號或變量名," "是要賦給該信號或變量的值。 Assign語句的應用場景 Assign語句通常用于組合邏
    的頭像 發表于 02-22 16:24 ?2763次閱讀
    主站蜘蛛池模板: 中文字幕亚洲无线码一区 | 女子扒开腿让男生桶爽 | 97资源站超碰在线视频 | 日本人的xxxxxxxxx69| 亚洲欧美一区二区成人片 | 把英语老师强奷到舒服动态图 | 国产1000部成人免费视频 | 亚洲欧美日韩精品久久奇米色影视 | 99免费在线观看 | 欧美精品色婷婷五月综合 | 欧美 亚洲综合在线一区 | 久在线观看福利视频 | 久久精品久久精品 | 国产午夜视频在永久在线观看 | 午夜亚洲精品不卡在线 | 亚洲AV美女成人网站P站 | 在线观看日本污污ww网站 | 国产成人精品午夜福麻豆报告 | 最近更新2019中文字幕国语 | 亚洲天码中字 | 久久精品国产亚洲AV麻豆欧美玲 | 亚洲精品www久久久久久久软件 | 胸大美女又黄的网站 | 果冻传媒2021一二三在线观看 | 入室强伦女教师被学生 | 伊人影院综合 | 国产99r视频精品免费观看 | 99精品视频在线观看免费播放 | 久久只精品99品免费久 | 久久综合九色综合国产 | 三级网站午夜三级 | 亚洲av欧美在我 | 三级网站午夜三级 | 5G在线观看免费年龄确认 | 精品亚洲国产熟女福利自在线 | 97色伦亚洲自偷 | 高hh乱亲女真实 | 日韩亚洲中文欧美在线 | 午夜精品久久久久久99热蜜桃 | 尿了么app| 亚洲乱码爆乳精品成人毛片 |