深入C語言返回值

2021-07-07 07:06:47 字數 860 閱讀 4337

最近在寫另一篇部落格時,突然發現了乙個問題,感到好奇怪,和學長討論了好久,但是還是沒什麼結果,於是就請教了網上的大神,終於有所收穫,具體問題如下:

當乙個函式(非main

函式)沒有給其顯式的

return

時,他的返回值是什麼呢?

本來我的猜想是:如果沒有顯式的return

時,如果當前函式最後一行是個有返回值的函式時,返回這個函式的返回值,如果是個沒有返回值的函式或是個表示式,則返回

0,但是下面的**打破了我的猜想,請問為何?

gcc的返回實現機制是什麼?(這是在

gcc下的結果,

clang

一直返回0)

**如下:

void fun()

intfunc()

int main()

許多人認為函式的返回值是隨機的,但是經過我的測試,不同的編譯器有不同的結果。主要分為一下兩類:

第一類:始終返回0

類,這結論是由

clang

的結果得出的。

第二類:有規律的返回某些值,絕對不是隨機的喲,出現這些結果的編譯器有vc

,gcc

結果分析:對於此問題,clang

會給予警告,而

gcc和

vc不會有警告,所以可以確定的是,

clang

其內部對於這一問題有對應的處理機制,就是始終返回

0,而gcc和

vc不會有任何特殊處理,只會像其他有return

的函式一樣,將

eax暫存器

中的東西直接返回,如果eax

暫存器中的值沒有被改變,則直接返回其的預設值,也就是返回0;

如果還是不是很清楚,請猛戳:

C語言return 返回值深入理解

首先明確,區域性函式執行完畢後會釋放空間。1.返回 值 時 通過彙編 可以很清楚的看出,函式執行完畢後,會將返回值放入乙個暫存器中,呼叫該函式處,是從暫存器中得到了返回值,並不是從已經執行完畢的函式空間中得到了這個值 因為之前的空間已經釋放掉了 函式內部的變數和指標通常會放在棧上,函式執行完畢後,棧...

c語言scanf返回值

1.scanf 函式是有返回值的,它的返回值可以分成三種情況 1 正整數,表示正確輸入引數的個數。例如執行 scanf d d a,b 如果使用者輸入 3 4 可以正確輸入,返回2 正確輸入了兩個變數 如果使用者輸入 3,4 可以正確輸入a,無法輸入b,返回1 正確輸入了乙個變數 2 0,表示使用者...

無返回值 C語言高階之路 函式 返回值!

c 語言的函式可以返回陣列以外 不包括陣列指標 的任何型別.不寫明返回型別,在以前的 c 語言版本中是預設返回 int,現在 c99 c 已不支援.void 表示沒有返回值,也就無須 return 語句 如果是其他語句必須有 return 語句.在 main 函式中 只是 main 函式 若忘掉 r...