2016-11-20 135 views
1

我正在寫代碼塊中的void main函數的c程序。c void main函數?返回16值

我只是寫沒有價值的回報。
該方案是如下:

#include<stdio.h>  
void main (void) 
{ 
    printf ("ali tariq\n"); 
    return; 
} 

然而,在控制檯窗口程序返回在控制檯窗口中的值16。 「處理返回16」

我想知道它爲什麼返回此值?
如何在使用代碼塊的窗口中使用此值?

感謝

+1

返回的整數讓我問你:因爲C程序應該返回一個退出狀態,因爲諸如控制檯窗口之類的環境傾向於報告狀態(特別是如果非零),並且由於你的程序不會返回必要的退出狀態,所以你做了什麼*期望*會發生? –

回答

0

你不應該使用void main(),使用int main()代替。

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/14349783) –

+0

@EliSadoff這提供了一個答案,他必須使用'int main()'而不是'void main()' – Danh

5

在(託管)C main函數必須返回int(C11§5.1.2.2.1[1])。通過聲明返回類型爲void,並且未指定任何返回值,您調用未定義的行爲。這意味着編譯器可以自由地返回任何東西,並在你的情況下,它結果是16.

+2

所有好的答案。我覺得這個是最清楚的3.對於像我這樣的傻瓜來說。 –

0

程序有未定義的行爲。首先根據C標準主要不帶參數的全部,應被宣佈像

int main(void) 

你聲明的函數具有返回類型void。在這種情況下,啓動程序的進程無法獲得該程序的有效返回碼。

1

您是不是可隨意根據需要申報退貨類型main。爲什麼?

  1. 因爲你沒有寫代碼調用main()。對不起'大喊大叫,但其他人寫了該代碼,並將其放在crt0.o左右。您的main()與該代碼鏈接,並且它不能只返回它所需的內容,因爲該代碼需要int。總是。它已經被編寫和編譯。你明白這個微妙之處?
  2. 因爲C標準是這樣說的。見Kninnug的章節和詩節的其他答案。

換句話說,你的代碼調用未定義行爲,它應該是沒有驚喜地發現這裏沒有設置值的垃圾值。

所以你期待編譯器的警告?更好的那些確實會通過正確的選擇來解決這個問題。例如。 gcc和鐺支持-Wmain-return-type

0

只是因爲一個函數被聲明爲void並不意味着它不會返回任何東西。例如,在x86上,許多調用約定指定函數調用後寄存器EAX中的值是該函數的返回值。因此,如果您有一個聲明爲void的C函數,但該函數的機器碼會更改值EAX,那麼該函數將被視爲該函數的返回值。

0

EVERY 「正常」 的程序,終止執行錯誤,必須返回ZERO

所以,你的程序必須是:

#include<stdio.h> 

int main (int argc, char *argv[]) // your program may have command line parameters 
{ 
    printf ("ali tariq\n"); 
    return 0; // Program terminate with NO ERRORS 
} 

但是也有情況下,當一個程序可以終止錯誤。

讓我們假設這樣的:

#include<stdio.h>  

void main (int argc, char *argv[]) 
{ 
    // program to make a division between two numbers 

    double a, b, res; 

    a = b = res = 0.0; 

    printf ("Enter 1st number: "); 
    scanf ("%lf", &a); 
    printf ("Enter 2nd number: "); 
    scanf ("%lf", &b); 

    if (b == 0) return 1; // division by '0' then return ERROR (any number != 0) 

    printf ("%f/%f = %f", a, b, a/b); 

    return 0; // NO ERROR 
} 

現在你可能會問:«不過,其中的返回值進行評估?

答:«由操作系統»

一個批處理文件可以運行您的程序和閱讀你的環境變量「ERRORLEVEL」