在了解這個之前,我們首先要知道代碼四區的概念:
- 運行前:全域區,代碼區
- 運行后:堆區,堆疊區
堆區和堆疊區顯然都是在程式運行后進行的,所以它們都是在main后面,
因此就需要從全域區和代碼區入手,代碼區顯然不行,因此只剩下全域區了,
結果也就是可以定義全域物件或者變數,
方法一:
定義全域物件或者變數
全域變數:

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

此時定義了全域物件a,所以就會呼叫類中的建構式,因此建構式這段程式也就在main函式之前運行了
兩個的運行結果一樣:

方法二:
- 在函式開頭加上 __attribute__((constructor)),就可以在main函式之前執行
- 如果想要在main函式結束之后運行,可加上__sttribute__((destructor))
(但是這個函式對編譯器有要求,需要是GNUC的編譯器(gcc,clang))
如下:
__attribute((constructor))void before()
{
printf("before\n");
func();
}
__attribute((destructor))void after()
{
printf("after\n");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/259781.html
標籤:其他
