main函式之前還能執行程式?

2021-10-19 10:02:27 字數 738 閱讀 4554

在了解這個之前,我們首先要知道**四區的概念:

堆區和棧區顯然都是在程式執行後進行的,所以它們都是在main後面。

因此就需要從全域性區和**區入手,**區顯然不行,因此只剩下全域性區了。

結果也就是可以定義全域性物件或者變數。

定義全域性物件或者變數

全域性變數:

當定義全域性變數a的時候,就會呼叫show函式,因此也就在main函式前執行了show函式這段程式。

全域性物件:

此時定義了全域性物件a,所以就會呼叫類中的建構函式,因此建構函式這段程式也就在main函式之前執行了

兩個的執行結果一樣:

如下:

__attribute((constructor))void before()

__attribute((destructor))void after()

main函式執行之前

main函式是我們的主程式入口函式。那麼在執行main函式之前我們的程式幫我們做了些什麼了?實際上在我們的系統裝載程式之後,首先執行的 並不是main的第一行,而是某些特別的 這些 會準備好main函式需要的環境,並且負責呼叫main函式,這時候才可以在main了寫各種業務 1 設定棧指標。2 初始...

main之前執行

分類 c 2013 01 25 14 56 1480人閱讀收藏 舉報 一 main結束 不代表整個程序結束 1 全域性物件的建構函式會在main 函式之前執行,全域性物件的析構函式會在main函式之後執行 用atexit註冊的函式也會在main之後執行。2 一些全域性變數 物件和靜態變數 物件的空間...

main函式之前會執行什麼?

我們 file name test00.c int main int argc,char argv cc test00.c o test.exe 會生成 test.exe cc test00.c nostdlib o test.exe undefined symbol start 也就是說 1.編譯...