簡體   English   中英

C函數的返回值

[英]Return value of function in C

int ret(char *)
{
    //nothing    
}

int main(void)
{
   printf("%d\n",ret("foo"));
}

為什么函數ret返回一個垃圾值?

int my_strlen(char *s)
{
   if(*s)
      return 1 + my_strlen(s + 1); // or my_strlen(s+1) + 1;
}

在上面的函數中,如果我沒有記錯,則在條件失敗時(即,只要達到'\\ 0'),my_strlen應該始終返回垃圾值,因為沒有其他情況或任何用於錯誤情況的return語句。 因此,對於任何有效的字符串,它應始終返回1 +垃圾值。 但是事實並非如此。 工作正常。 它給出任何字符串的確切長度。 為什么它不像函數“ ret ”那樣返回垃圾值呢? 請清除我的疑慮。 任何幫助將不勝感激。 謝謝

在這兩種情況下,它都是未定義的行為 根據C99標准的第6.9.1節(N869草案)的功能定義 ,第12節:

如果到達終止函數的} ,並且調用者使用了函數調用的值,則該行為未定義。

未定義行為的一個子集似乎正常工作,這在第二個代碼片段中得到了證明。

很抱歉,您的問題普遍缺乏尊重。

真正的答案是,在Eclipse / Microsoft C編譯器上,您的代碼將以“警告”進行編譯。 我復制了您的代碼,並修復了您可能輸入的錯誤:

   // Here, I added the variable X
   int ret(char *X)
   {
       //nothing
   }

   int main(void)
   {
      printf("%d\n",ret("foo"));
   }

並收到以下消息:

   c:~\eclipsecdt\compilererrormsg\main.c(15) : warning C4716: 'ret' : must return a value

希望此消息解釋了修復代碼所需的操作。 之所以會產生垃圾,是因為有一個叫做“堆棧”的東西,並且因為沒有發出return 0;而沒有將整數放置在它上面return 0; (如果需要,則為非零)語句。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM