簡體   English   中英

多次調用main函數是C中的一個好習慣嗎?

[英]Calling main function more than once is a good practice in C?

我看到了這樣的C代碼:

#include <stdio.h>

void main  ()
{
    static int ivar = 5;
    printf ("%d", ivar--);

    if (ivar)
        main ();
}

哪個輸出:

54321

我是C的新手,我想直到條件失敗, main方法被一次又一次地調用。 由於我是C的新手,在上述情況下多次調用main函數是不錯的做法? 有沒有真實世界的案例,這種代碼非常有用?

提前致謝。

在您的示例中,它無關緊要,因為它只是一小段代碼。 但在一般情況下,我認為調用main是一個壞主意,原因如下:

  • 可讀性。 在檢查程序時,沒有人會認為將在某一點調用main 當你看到它時,你必須回溯並重讀整個事物。 此外, main不是一個有意義的名稱,因為它不清楚遞歸的意圖是什么。 所以我會寫一個有意義的名字的另一個函數來反映這一點。
  • 可重用性。 具有有意義名稱的新函數很可能在復雜程序中的多個位置有用。
  • 命令行參數。 有時您可能需要在程序中使用命令行參數。 甚至GUI程序也需要它們(用於文件關聯等)。 並且您需要重新調整對main的所有調用以將其考慮在內。
  • C ++兼容性。 這在C ++中是非法的。

我會說很少,如果有的話,最好調用main函數。 如果您要進行遞歸,請創建一個函數來執行此操作。

while循環更合適。 當每次遞歸時,你正在做一個不同的工作 - 通常是一個較小的工作,遞歸是有道理的。

這段代碼真正做的是演示函數本地靜態變量: ivar僅在main第一次調用中初始化。 每次遞歸時,盡管有ivar=5語句,但它會遞減。

main有特殊意義。 慣用語,它應該初始化環境 ,然后調用一些驅動應用程序邏輯的其他函數。

無論如何,優化編譯器可能會將該代碼轉換為迭代版本。

這種情況不常見(我之前從未見過它),非常令人困惑,因為main應該在程序啟動時調用一次,在程序結束時調用,在大多數真實程序中基本上都是不切實際的,因為你需要停止后續調用main()再次解析命令行。

只編寫一個單獨的遞歸函數並從main調用它並使用普通函數參數而不是靜態變量更為合理。

它被稱為遞歸 ,它可能非常有用。 例如遍歷一棵樹。 一些數學計算也使用遞歸。

暫無
暫無

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

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