return是啥return其英文含義就是返回,用在函數(shù)中,退出當(dāng)前函數(shù)。這個想必都知道,分兩種情況:
函數(shù)不帶返回值時,如
void func(void)
/*功能代碼*/
return;
對于不帶返回值函數(shù)返回,其語法為 return;對于void函數(shù),通常不顯式加return語句,程序會自動返回到其調(diào)用者現(xiàn)場。
所以上述函數(shù)如下改寫一下,效果是一樣的:
void func(void)
/*功能代碼*/
函數(shù)帶返回值,如
int add(int a, int b)
int result = a+b;
return result;
對于帶返回值函數(shù)返回,其語法為 return 《value》;返回值可以是一些幾種情況:
一個常數(shù)
一個變量
計算式,例如(a + b)* c
調(diào)用另一個返回值的函數(shù)
注意:返回值的類型須與函數(shù)返回值類型一致,如不一致,編譯器會自動做類型轉(zhuǎn)換,這里容易出現(xiàn)類型轉(zhuǎn)換的錯誤
上代碼:
/*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:返回一個變量*/
int add(int a, int b
int result = a+b;
return result;
/* Case 3:返回一個表達(dá)式,add函數(shù)改寫一下*/
int add(int a, int b)
return (a+b);
/* Case 4:返回一個函數(shù)調(diào)用 */
/*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 咋工作的?首先需要了解函數(shù)調(diào)用是如何工作的。當(dāng)調(diào)用一個函數(shù)時,會發(fā)生兩件事:
當(dāng)前函數(shù)的執(zhí)行暫停。
調(diào)用的函數(shù)執(zhí)行。
這就是所謂的的控制權(quán)轉(zhuǎn)移。當(dāng)調(diào)用一個函數(shù)時,程序的控制從調(diào)用函數(shù)轉(zhuǎn)移到被調(diào)用函數(shù)。return語句將控制權(quán)返回到前一個調(diào)用它的函數(shù)。該函數(shù)將從暫停的地方繼續(xù)執(zhí)行。
在調(diào)用處,如果查看匯編代碼,單片機或處理器會將當(dāng)前CPU的PC指針、臨時變量、相關(guān)寄存器壓棧,調(diào)用函數(shù)返回時,會將棧的內(nèi)容彈出到相應(yīng)的寄存器或者臨時變量,以恢復(fù)現(xiàn)場。
void 函數(shù)真不需要加return嗎?事實上不然,這就是本文希望引起注意的一些要點,在哪些場景下需要顯式的對void函數(shù)添加return語句呢?
傳入指針為空指針,這也是很多面試官會考察的要點之一,這樣處理會增強程序的健壯性。
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;
檢測到異常時需立即退出當(dāng)前程序的執(zhí)行流。
void func(void)
FILE *pFile=fopen(“。/test.csv”,“wt+”);
/*這里就檢測到文件無法打開的異常,則需要馬上退出*/
if(pFile==NULL)
printf(“file opened failed”);
return ;
fclose(pFile);
總結(jié)一下因為容易忽略,其實也是初學(xué)者可能不太注意的一些地方,所以在此總結(jié)一下:
return的具體做了什么,其內(nèi)在工作原理需要棧的支持
不帶返回值的函數(shù),可不加return語句
帶返回值的函數(shù),注意返回值的類型與函數(shù)返回值類型一致
void函數(shù),在一些特定的場合加上return語句,可增加程序的健壯性:
傳入指針為空指針
傳入?yún)?shù)非法或者越界
檢測到異常時需立即退出當(dāng)前程序的執(zhí)行流
其實非void函數(shù),也墻裂建議這么處理。
責(zé)任編輯:pj
-
參數(shù)
+關(guān)注
關(guān)注
11文章
1865瀏覽量
32826 -
void
+關(guān)注
關(guān)注
0文章
23瀏覽量
10027 -
Return
+關(guān)注
關(guān)注
0文章
9瀏覽量
7779
發(fā)布評論請先 登錄
函數(shù)指針的六個常見應(yīng)用場景

函數(shù)信號分析儀的原理和應(yīng)用場景
C語言如何處理函數(shù)的返回值
javascript:void(0) 的作用是什么
SUMIF函數(shù)的應(yīng)用場景分析
便攜式示波器的技術(shù)原理和應(yīng)用場景
【「嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用」閱讀體驗】+ Hypervisor應(yīng)用場景調(diào)研
盛顯科技:超高分媒體處理器的應(yīng)用場景有哪些?
脈沖式線圈測試儀的技術(shù)原理和應(yīng)用場景
HarmonyOS Next原生應(yīng)用開發(fā)-從TS到ArkTS的適配規(guī)則(十六)
面試常考+1:函數(shù)指針與指針函數(shù)、數(shù)組指針與指針數(shù)組

評論