簡體   English   中英

main和main()之間的區別

[英]Difference between main and main()

以下代碼1很好

#include <stdio.h>    // code 1
main()
{
    printf("%u",main);
}

但是此代碼2給出了分段錯誤。

#include <stdio.h>  // code 2
main()
{
    printf("%u",main());
}

我沒有得到main和main()有什么區別?

您是否已使用編譯器啟用的所有警告進行編譯? 使用gcc意味着將-Wall參數賦予gcc (而-g對於調試信息很有用)。

首先,您的printf("%u", main)應該是printf("%p\\n", main) %p輸出一個指針(技術上函數指針不是%p所需要的數據指針,實際上它們通常具有相同的大小和相似的表示形式),並且您應該使用換行符\\n結束格式字符串。 這將獲取main函數的地址 ,並將該地址傳遞給printf

然后,您的第二個printf("%u", main())調用printf並帶有通過遞歸調用 main函數獲得的參數。 這種遞歸永遠不會結束,您會炸毀調用堆棧(即,堆棧溢出),因此在Unix上獲得SIGSEGV

在學上, mainC標准的一個非常特殊的名稱,您可能不應該調用它( crt0.o的啟動代碼會自動對其進行魔術調用)。 main上進行遞歸非常不好,可能是非法的。

另請參閱我的其他的答案在這里

暫無
暫無

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

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