[英]What really happen when I compile int main; in C
編譯時真正發生了什么:
int main;
它不應該是main()並導致錯誤嗎?
我試圖在CodeBlocks中編譯代碼,它編譯完美而沒有錯誤。
這不是錯誤,因為C源文件不需要具有main
函數,只要您不嘗試在同一范圍內定義兩次,就可以將main
定義為您想要的任何內容。 因為這是你的整個程序,所以很好 - 但程序當然不能正常運行,因為沒有main
功能可以找到。
它所做的就是聲明一個名為main的全局(外部)變量,初始化為0.鏈接器通常會發出錯誤,如果它不存在,但它可能會滿足外部變量的存在(我希望它假設它是一個指針) 。
編輯:我用調試器調查了一下這一點,果然, main
的值為0,即該變量被用作沒有強制轉換的指針。 因此初始化代碼嘗試運行位於地址0的函數,從而在我的平台上產生段錯誤。
由於范圍不正確(或缺乏理解),我認為你在這里感到困惑。
當你在這里說int main;
的聲明int main;
正在由編譯器傳遞,我假設你在函數范圍內聲明它。 但是,如果您嘗試在全局范圍內聲明它,則編譯器將拋出重新定義錯誤。
因此,只要您在同一范圍內沒有兩個相同的標識符,編譯器就會滿意並讓您擁有自己的方式。
以下代碼將給出重新定義錯誤:
int main;
int main()
{
printf("In main\n");
}
下面的代碼不會,因為main的范圍僅限於函數內部,編譯器認為int main
變量,結果打印為5。
int main()
{
int main = 5;
printf("In main, value of main is %d\n", main);
}
但是下面的代碼將打印main的地址
int main()
{
printf("In main, value of main is %d\n", main);
}
編輯:閱讀完評論后,我覺得這里的關鍵問題是你根本沒有主要功能,你應該為“C”程序開始工作。 如果你沒有main函數,只是聲明一個int main;
變量,你的代碼可能仍然可以編譯,但是當你執行時會出現混亂和混亂,因為main是一個整數變量,而它應該是一個函數。 但是,只要你按照我的上述答案控制你的主人,你應該做得很好。
你可以去這個鏈接,它解釋了編譯和執行C程序的概念
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.