簡體   English   中英

當我編譯int main時真正發生了什么; 在C.

[英]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.

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