簡體   English   中英

C main函數是可選的,您可以在其外部編寫代碼嗎?

[英]Is the C main function optional and can you write code outside of it?

通常,當我在GitHub上查看源代碼時, main功能會被忽略或在其外部有代碼。 我完成的教程告訴我-我不能做這些事情。 我有什么想念的嗎?

操作系統中托管的常規完整C程序必須具有main例程。

GitHub上的項目可能只是程序的一部分,例如打算在其他程序中使用的例程的集合。 (這樣的集合通常被稱為庫)。如果源代碼不打算以自己是一個完整的程序,那么它並不需要有一個main例程。 稍后,將在自己的程序中使用例程集合的人添加一個main例程。

C源代碼也可以編譯並與其他編程語言編寫的源代碼結合使用。 C標准未指定其行為,因此它特定於執行此操作時使用的各種開發人員工具。 這樣的混合程序必須具有一些主例程,但是可以將其稱為main以外的其他東西。 盡管如此, main作為main例程的名稱已變得非常流行,因此使用非常頻繁。

C源代碼可用於特殊軟件,例如操作系統內核。 與托管環境相比,C標准描述了一個獨立的環境。 在獨立的環境中,許多事情都是針對特定系統定制的,包括如何設置程序的起始地址。 在這種情況下,例如,主入口點可能被稱為start而不是main ,並且該入口點的地址可能會以某種特定於硬件的特殊數據結構傳送到硬件。

關於函數之外的代碼,可以是初始化表達式。 (對於在函數外部的初始化中可以使用哪些表達式有嚴格的限制。您不能在這些表達式中編寫通用的C代碼。)您必須顯示特定的示例才能獲得有關此問題的答案。

根據定義,可執行二進制文件的主要方法是應用程序的入口點。

庫(或者,不需要操作系統執行的任何內容都不必具有主要功能

因此,如果沒有主要功能,C代碼本身可以很好地運行。 但是,您不能將任意代碼放在函數之外(無論是主函數還是其他函數)..


通常您可以說:

  • “代碼必須存在於C語言的函數中”(變量和宏除外)
  • 主要功能是執行二進制文件的OS入口點

[這有點簡化,但IMO是一個好的經驗法則]

這些樣本根本不完整,要使程序正常運行,必須有一個入口點(對於標准C,這是主要的)。 代碼語句必須在函數內部,盡管該函數不必是主要函數。

但是,可以在函數主體外部使用帶有初始值設定項的變量。

暫無
暫無

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

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