[英]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
。
在學上, main
是C標准的一個非常特殊的名稱,您可能不應該調用它( crt0.o
的啟動代碼會自動對其進行魔術調用)。 在main
上進行遞歸非常不好,可能是非法的。
另請參閱我的其他的答案在這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.