[C/C++] main函數執行前後還會發生什麼

問題描述

C/C++語言執行過程中是不是所有的動作都由main()函數引起,來看下面的代碼:

#include <iostream>
class A{

public:
    A() {
        printf("This is Constructor\n");
    }

    ~A() {
        printf("This is destructor\n");
    }
};

A a;

int main() {
    printf("This is main\n");
}

這段代碼很簡單,但是最終是不是隻是打印了This is main這句話,顯然不是,實際的結果是按照下面順序的三句話:

This is Constructor
This is main
This is destructor

問題分析

首先main()函數只不過是提供了一個函數入口,在main()函數中的顯示代碼執行之前,會由編譯器生成_main函數,其中會進行所有全局對象的構造以及初始化工作。簡單來說對靜態變量、全局變量和全局對象來說的分配是早在main()函數之前就完成的,所以C/C++中並非所有的動作都是由於main()函數引起的。
同理在main()函數執行後,程序退出,這時候會對全局變量和全局對象進行銷燬操作,所以在main()函數還會執行相應的代碼。
在上面的例子中,a的構造函數會先執行,再執行main,最後會調用a的析構函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章