回答
C標準(5.1.2.2.1程序啓動)
1名爲在程序啓動的功能被命名爲主力。 T 他 實現聲明此函數沒有原型。應當 帶有int返回類型和不帶參數定義:
int main(void) { /* ... */ }
或具有兩個參數(此處稱爲argc和argv,儘管可以使用任何 名稱,如他們是本地的中,他們 聲明的功能):
int main(int argc, char *argv[]) { /* ... */ }
或等同物; 10)或以某種其他實施方式定義的方式。
雖然一些編譯器,例如MS VS的編譯器支持與返回類型void
然而這樣的聲明函數main的聲明並不是函數main的C標準聲明。
因此,如果實現聲明沒有函數main的原型,並且如果函數main不調用任何其他函數,則不需要頭。
你可能只寫
int main(void)
{
}
return語句也可以省略。
請注意,它是定義函數main的用戶。所以在上面介紹的程序中有一個main函數的定義,它的主體中不包含任何語句。該函數不會執行任何操作,並立即將控件返回到託管環境。
如果您的代碼中沒有標頭使用printf
,編譯器不知道您要引用的是哪種類型的實體。
如果您提供的main
,編譯器確切知道這意味着什麼,您只是指定它。
void
是一種內置類型,由編譯器知道。 main
是程序的入口點,而你寫的printf
需要一些原型。如果您在源代碼中編寫自己的printf
定義,它將在沒有標題的情況下編譯。
編譯C程序唯一要做的就是指定一個入口點,即main
。
標題只是提供其他IO的可能性。
void printf()
{
}
int main()
{
printf();
}
並且用'void'聲明'main'具有未定義的/實現定義的行爲,所以它根本不需要工作。重新定義'printf'也有不確定的行爲。 –
Ofc我知道它,它只是解釋這些程序編譯是如何工作的,你不能將實現定義/未定義行爲等東西糾纏到初學者頭部。感謝downvote無論如何:-)。 –
關鍵是它是完全有效的*不*編譯 –
頭文件只是一種語言功能,它提供了在不同模塊(翻譯單元)或甚至整個庫中組織代碼的方法。它們絕不是強制性的使用。
C程序中唯一強制的要求是有一些入口指向你的程序的方式。在託管系統(例如具有OS的PC)上,該入口點必須是名爲main()
的函數。它可以用幾種方式來聲明。 void main()
不保證工作,除非編譯器明確支持該表單。最便攜和標準化的格式是:
int main (void)
{
return 0;
}
當然,這個程序當然不是很令人興奮的運行,因爲它什麼都沒有。但它是完全有效的。
不需要main()的任何前向聲明。對於獨立環境,入口點的格式完全由實現定義。對於託管環境,C標準明確指出:「該實現沒有聲明該函數的原型。」 - 這種情況下的實現意味着編譯器。用英語表示main()
函數必須在沒有任何以前的聲明的情況下工作,按照語言定義。
另請注意,'void main()'是一種過時的格式,在未來的語言版本中可能無法使用。只有'void main(void)'保證將來能夠工作。 – Lundin
- 1. getch()在沒有conio.h的情況下工作 - 這怎麼可能?
- 2. 這是否在沒有用戶許可的情況下工作?
- 3. 在沒有聲明函數指針的情況下調用void *作爲函數
- 4. 我怎麼能在這種情況下
- 5. 爲什麼wctype.h中的函數不能在沒有setlocale()的情況下工作?
- 6. 我怎麼能在這種情況下
- 7. 是否有可能在沒有自定義函數的情況下在對象外引發事件
- 8. wordpress主題可以在沒有WordPress的情況下工作嗎?
- 9. .htaccess重寫不能在沒有斜線的情況下工作
- 10. 在沒有Object.defineProperty的情況下定義不可寫屬性?
- 11. Copious應用可以在沒有publish_stream權限的情況下發布在牆上,這怎麼可能?
- 12. 定義php函數並在沒有()的情況下使用
- 13. 爲什麼函數在沒有指定參數的情況下正常工作?
- 14. 哪裏可以測試arduino在沒有硬件的情況下做什麼?
- 15. 在這種簡單的情況下可能發生死鎖嗎?
- 16. 「Puts()」函數如何在沒有參數的情況下工作?
- 17. 如何在沒有cin.get的情況下使這項工作成爲可能()
- 18. 在哪些情況下,我們只能在實現文件中寫入函數的定義?
- 19. 爲什麼只有「main」在require.js中工作?定義( 「主」,[ '的jquery'],()的函數
- 20. 在沒有FPU的情況下浮點數會發生什麼?
- 21. 什麼情況下可能發生短的讀/寫?
- 22. @ app.route不能在沒有重定向的情況下工作
- 23. 這可以在沒有Quasi Quoter的情況下完成嗎?
- 24. 這可以在沒有同步AJAX的情況下完成嗎?
- 25. 在這種情況下,我怎麼能寫queue.put
- 26. 這個php表單如何在沒有定義變量的情況下工作?
- 27. 爲什麼在沒有空括號的情況下定義Scala函數不會像函數那樣工作?
- 28. 怎麼可能?買家可以在沒有PayPal賬戶的情況下結賬
- 29. 在沒有'dbo'的情況下,用戶定義的sql函數無法正常工作。 prifix到函數名
- 30. 如何在沒有頭文件的情況下定義靜態成員?
你必須編寫'main()'的定義,並且做到了。 –
所以是printf.But我們有它,main()@FilipKočica –
你需要運行一個C程序的唯一東西是一個'main'函數,在沒有包含頭文件IO,但你不需要它們 –