我正在寫代碼塊中的void main函數的c程序。c void main函數?返回16值
我只是寫沒有價值的回報。
該方案是如下:
#include<stdio.h>
void main (void)
{
printf ("ali tariq\n");
return;
}
然而,在控制檯窗口程序返回在控制檯窗口中的值16。 「處理返回16」
我想知道它爲什麼返回此值?
如何在使用代碼塊的窗口中使用此值?
感謝
我正在寫代碼塊中的void main函數的c程序。c void main函數?返回16值
我只是寫沒有價值的回報。
該方案是如下:
#include<stdio.h>
void main (void)
{
printf ("ali tariq\n");
return;
}
然而,在控制檯窗口程序返回在控制檯窗口中的值16。 「處理返回16」
我想知道它爲什麼返回此值?
如何在使用代碼塊的窗口中使用此值?
感謝
你不應該使用void main()
,使用int main()
代替。
這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/14349783) –
@EliSadoff這提供了一個答案,他必須使用'int main()'而不是'void main()' – Danh
在(託管)C main
函數必須返回int
(C11§5.1.2.2.1[1])。通過聲明返回類型爲void
,並且未指定任何返回值,您調用未定義的行爲。這意味着編譯器可以自由地返回任何東西,並在你的情況下,它結果是16.
所有好的答案。我覺得這個是最清楚的3.對於像我這樣的傻瓜來說。 –
程序有未定義的行爲。首先根據C標準主要不帶參數的全部,應被宣佈像
int main(void)
你聲明的函數具有返回類型void
。在這種情況下,啓動程序的進程無法獲得該程序的有效返回碼。
您是不是可隨意根據需要申報退貨類型main
。爲什麼?
crt0.o
左右。您的main()與該代碼鏈接,並且它不能只返回它所需的內容,因爲該代碼需要int
。總是。它已經被編寫和編譯。你明白這個微妙之處?換句話說,你的代碼調用未定義行爲,它應該是沒有驚喜地發現這裏沒有設置值的垃圾值。
所以你期待編譯器的警告?更好的那些確實會通過正確的選擇來解決這個問題。例如。 gcc和鐺支持-Wmain-return-type
。
只是因爲一個函數被聲明爲void並不意味着它不會返回任何東西。例如,在x86上,許多調用約定指定函數調用後寄存器EAX
中的值是該函數的返回值。因此,如果您有一個聲明爲void
的C函數,但該函數的機器碼會更改值EAX
,那麼該函數將被視爲該函數的返回值。
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」
返回的整數讓我問你:因爲C程序應該返回一個退出狀態,因爲諸如控制檯窗口之類的環境傾向於報告狀態(特別是如果非零),並且由於你的程序不會返回必要的退出狀態,所以你做了什麼*期望*會發生? –