91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

哪些場(chǎng)景下需要顯式的對(duì)void函數(shù)添加return語(yǔ)句呢?

GReq_mcu168 ? 來(lái)源:玩轉(zhuǎn)單片機(jī) ? 作者:玩轉(zhuǎn)單片機(jī) ? 2020-06-24 11:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

return是啥return其英文含義就是返回,用在函數(shù)中,退出當(dāng)前函數(shù)。這個(gè)想必都知道,分兩種情況:

函數(shù)不帶返回值時(shí),如

void func(void)

/*功能代碼*/

return;

對(duì)于不帶返回值函數(shù)返回,其語(yǔ)法為 return;對(duì)于void函數(shù),通常不顯式加return語(yǔ)句,程序會(huì)自動(dòng)返回到其調(diào)用者現(xiàn)場(chǎng)。

所以上述函數(shù)如下改寫(xiě)一下,效果是一樣的:

void func(void)

/*功能代碼*/

函數(shù)帶返回值,如

int add(int a, int b)

int result = a+b;

return result;

對(duì)于帶返回值函數(shù)返回,其語(yǔ)法為 return 《value》;返回值可以是一些幾種情況:

一個(gè)常數(shù)

一個(gè)變量

計(jì)算式,例如(a + b)* c

調(diào)用另一個(gè)返回值的函數(shù)

注意:返回值的類(lèi)型須與函數(shù)返回值類(lèi)型一致,如不一致,編譯器會(huì)自動(dòng)做類(lèi)型轉(zhuǎn)換,這里容易出現(xiàn)類(lèi)型轉(zhuǎn)換的錯(cuò)誤

上代碼:

/*Case 1,返回常量*/

/*返回常量,-1表示參數(shù)非法,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:返回一個(gè)變量*/

int add(int a, int b

int result = a+b;

return result;

/* Case 3:返回一個(gè)表達(dá)式,add函數(shù)改寫(xiě)一下*/

int add(int a, int b)

return (a+b);

/* Case 4:返回一個(gè)函數(shù)調(diào)用 */

/*STM32編程:是時(shí)候深入理解棧文章中提到的遞歸計(jì)算階乘*/

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 咋工作的?首先需要了解函數(shù)調(diào)用是如何工作的。當(dāng)調(diào)用一個(gè)函數(shù)時(shí),會(huì)發(fā)生兩件事:

當(dāng)前函數(shù)的執(zhí)行暫停。

調(diào)用的函數(shù)執(zhí)行。

這就是所謂的的控制權(quán)轉(zhuǎn)移。當(dāng)調(diào)用一個(gè)函數(shù)時(shí),程序的控制從調(diào)用函數(shù)轉(zhuǎn)移到被調(diào)用函數(shù)。return語(yǔ)句將控制權(quán)返回到前一個(gè)調(diào)用它的函數(shù)。該函數(shù)將從暫停的地方繼續(xù)執(zhí)行。

在調(diào)用處,如果查看匯編代碼,單片機(jī)處理器會(huì)將當(dāng)前CPU的PC指針、臨時(shí)變量、相關(guān)寄存器壓棧,調(diào)用函數(shù)返回時(shí),會(huì)將棧的內(nèi)容彈出到相應(yīng)的寄存器或者臨時(shí)變量,以恢復(fù)現(xiàn)場(chǎng)。

void 函數(shù)真不需要加return嗎?事實(shí)上不然,這就是本文希望引起注意的一些要點(diǎn),在哪些場(chǎng)景下需要顯式的對(duì)void函數(shù)添加return語(yǔ)句呢?

傳入指針為空指針,這也是很多面試官會(huì)考察的要點(diǎn)之一,這樣處理會(huì)增強(qiáng)程序的健壯性。

void swap(int *a, int *b)

int temp;

/*不可操作空指針*/

if(a==NULL || b==NULL)

return ;

else

temp = *a;

*a = *b;

*b = temp;

傳入?yún)?shù)非法或者越界

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參數(shù)是否非法越界 */

if(day》E_SUN || day《E_MON || pDay ==NULL)

return;

*pDay = day;

檢測(cè)到異常時(shí)需立即退出當(dāng)前程序的執(zhí)行流。

void func(void)

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

/*這里就檢測(cè)到文件無(wú)法打開(kāi)的異常,則需要馬上退出*/

if(pFile==NULL)

printf(“file opened failed”);

return ;

fclose(pFile);

總結(jié)一下因?yàn)槿菀缀雎?,其?shí)也是初學(xué)者可能不太注意的一些地方,所以在此總結(jié)一下:

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

不帶返回值的函數(shù),可不加return語(yǔ)句

帶返回值的函數(shù),注意返回值的類(lèi)型與函數(shù)返回值類(lèi)型一致

void函數(shù),在一些特定的場(chǎng)合加上return語(yǔ)句,可增加程序的健壯性:

傳入指針為空指針

傳入?yún)?shù)非法或者越界

檢測(cè)到異常時(shí)需立即退出當(dāng)前程序的執(zhí)行流

其實(shí)非void函數(shù),也墻裂建議這么處理。
責(zé)任編輯:pj

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

    關(guān)注

    11

    文章

    1869

    瀏覽量

    33945
  • void
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    10238
  • Return
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    傳遞一個(gè)無(wú)符號(hào)的 long 型指針給函數(shù)

    C語(yǔ)言允許傳遞指針給函數(shù),只需要簡(jiǎn)單地聲明函數(shù)參數(shù)為指針類(lèi)型即可。 下面的實(shí)例中,我們傳遞一個(gè)無(wú)符號(hào)的 long 型指針給函數(shù),并在函數(shù)內(nèi)改
    發(fā)表于 01-27 11:51

    指針與函數(shù)詳解

    ,和函數(shù)入?yún)⑹侵羔樣惺裁春锰?b class='flag-5'>呢??? #include #include void plusfunction(int a,int b,int *p); int main() { int *p
    發(fā)表于 01-23 06:02

    嵌入開(kāi)發(fā)常用函數(shù)速查表

    在嵌入開(kāi)發(fā)中,掌握常用函數(shù)的用法可以大大提高開(kāi)發(fā)效率。無(wú)論是單片機(jī)初學(xué)者還是有一定經(jīng)驗(yàn)的工程師,熟悉函數(shù)庫(kù)和調(diào)用方式都是必備技能。今天,我們?yōu)榇蠹艺硪环萸度?b class='flag-5'>式開(kāi)發(fā)常用
    的頭像 發(fā)表于 01-19 09:06 ?306次閱讀
    嵌入<b class='flag-5'>式</b>開(kāi)發(fā)常用<b class='flag-5'>函數(shù)</b>速查表

    函數(shù)指針與回調(diào)函數(shù)解讀

    );} 使用nodepad++編譯一 然后在keil中試驗(yàn) 那這樣是啥意思? typedef uint8_t (*func_ptr) (void); 這里是把定義了一個(gè)別名叫(*func_ptr
    發(fā)表于 01-19 07:34

    C語(yǔ)言函數(shù)指針的六個(gè)高級(jí)的應(yīng)用場(chǎng)景

    函數(shù)指針是一種非常強(qiáng)大的編程工具,它可以讓我們以更加靈活的方式編寫(xiě)程序。在本文中,我們將介紹 6 個(gè)函數(shù)指針的高級(jí)應(yīng)用場(chǎng)景,并貼出相應(yīng)的代碼案例和解釋。 回調(diào)函數(shù) 回調(diào)
    發(fā)表于 01-04 12:25

    C語(yǔ)言回調(diào)函數(shù)原來(lái)這么簡(jiǎn)單

    了解開(kāi)發(fā)語(yǔ)言的朋友應(yīng)該都會(huì)對(duì)回調(diào)函數(shù)有所了解,在很多的程序開(kāi)發(fā)語(yǔ)言中都能看到回調(diào)的身影。很多場(chǎng)景,當(dāng)某個(gè)條件成立以后我們**代碼執(zhí)行某些指定的部分,這個(gè)時(shí)候可以考慮使用回調(diào)函數(shù)的方式
    發(fā)表于 12-30 06:45

    C語(yǔ)言中實(shí)現(xiàn)函數(shù)宏的三種方式

    1. 函數(shù)宏介紹 函數(shù)宏,即包含多條語(yǔ)句的宏定義,其通常為某一被頻繁調(diào)用的功能的語(yǔ)句封裝,且不想通過(guò)函數(shù)方式封裝來(lái)降低額外的彈棧壓棧開(kāi)銷(xiāo)。
    發(fā)表于 12-29 07:34

    條件的執(zhí)行語(yǔ)句

    條件執(zhí)行語(yǔ)句大多在if語(yǔ)句中使用,也在使用關(guān)系運(yùn)算符(<,==,>等) 或者布爾值表達(dá)式(,!等)計(jì)算復(fù)雜表達(dá)式時(shí)使用。對(duì)于包含函數(shù)調(diào) 用的代碼片段,由于函數(shù)返回值會(huì)被
    發(fā)表于 12-12 08:25

    函數(shù)調(diào)用性能消耗

    + e + f; } ing g2(void) { return f2(1, 2, 3, 4, 5, 6); } 函數(shù)g2中的第五個(gè)和第六個(gè)參數(shù)存儲(chǔ)于棧上并在函數(shù)f
    發(fā)表于 12-12 07:50

    Switch的應(yīng)用場(chǎng)景

    Switch的應(yīng)用場(chǎng)景如下: 調(diào)用一到多個(gè)函數(shù) 設(shè)置變量值或者返回一個(gè)值 執(zhí)行一到多個(gè)代碼片段 如果case標(biāo)簽很多,在switch的前兩個(gè)使用場(chǎng)景中,使用查找表可以更高效的完成。例如下面的兩種
    發(fā)表于 12-12 07:28

    嵌入可測(cè)試性軟件設(shè)計(jì)

    ; return res; } // 調(diào)用 cal_func(get_a_from_flash(), 5); 這種類(lèi)似場(chǎng)景,實(shí)際開(kāi)發(fā)中應(yīng)該有不少,大家平時(shí)都是按照方式一寫(xiě)代碼還是方式二寫(xiě)代碼
    發(fā)表于 12-02 06:06

    SConscript文件如何既添加group文件又添加下層的SConscript?

    框架中的SConscript要不就是Return(‘group’)要不就是Return(‘objs’),如果我想要在一個(gè)SConscript文件既添加group文件又添加下層文件夾中的
    發(fā)表于 09-29 08:12

    獨(dú)和集有什么區(qū)別?一篇搞懂!?

    、輕度娛樂(lè),輕便又節(jié)能;獨(dú)適合重度游戲、專(zhuān)業(yè)創(chuàng)作,性能強(qiáng)但功耗高。今天,我們就從 “硬件本質(zhì)”“核心差異”“適用場(chǎng)景”三個(gè)維度,徹底講清兩者區(qū)別,幫你選電腦時(shí)不盲目跟風(fēng),精準(zhǔn)匹配需求。 ? 一、獨(dú)和集
    的頭像 發(fā)表于 09-19 16:09 ?7295次閱讀
    獨(dú)<b class='flag-5'>顯</b>和集<b class='flag-5'>顯</b>有什么區(qū)別?一篇搞懂!?

    【RA4E2開(kāi)發(fā)板評(píng)測(cè)】FSP5.2之后的串口重定向問(wèn)題解決方法

    = S_IFCHR; return 0; } errno = EBADF; return 0; } 同時(shí)還需要記得添加頭文件如下: #include<sys/stat.h
    發(fā)表于 08-29 07:02

    函數(shù)指針的六個(gè)常見(jiàn)應(yīng)用場(chǎng)景

    函數(shù)指針在嵌入開(kāi)發(fā)中有著廣泛的應(yīng)用,它讓代碼更加靈活,減少冗余,提高可擴(kuò)展性。很多時(shí)候,我們需要根據(jù)不同的情況動(dòng)態(tài)調(diào)用不同的函數(shù),而函數(shù)
    的頭像 發(fā)表于 04-07 11:58 ?1476次閱讀
    <b class='flag-5'>函數(shù)</b>指針的六個(gè)常見(jiàn)應(yīng)用<b class='flag-5'>場(chǎng)景</b>