這是在面試中被問到的乙個問題,回答了是。這問題第一感覺答案就是否定的,一時也沒想出來理由只能回答了是。當時太緊張了,其實回想一下組合語言就該想到程式的入口位址是可以指定的,c語言編譯器預設以main作為入口位址。
網上查閱後,發現了 __attribute__ 這個關鍵字,它可以設定函式屬性,變數屬性,型別屬性。
參考:看下面的例子:
// gcc 編譯器
#include__attribute__((constructor)) void
before_main
()__attribute__
((destructor)) void
after_main
()int
main
()
可以看到上面的程式並不是從main函式開始執行的。constructor 設定在main前面執行,destructor 設定在main之後執行。 C語言必須要記住的經典程式
1 判斷101 200之間有多少個素數,並輸出所有素數及素數的個數。程式分析 判斷素數的方法 用乙個數分別去除2到sqrt 這個數 如果能被整除,則表明此數不是素數,反之是素數。include math.h main intm,i,k,h 0,leap 1 printf n for m 101 m ...
程式是從main主函式開始執行嗎?
很多人開始學計算機語言,編寫 時都會有乙個疑問 程式真的是從main主函式開始的嗎?之前什麼都不做嗎?main結束後就不能執行其他函式了嗎?下面本篇文章就為此問題做乙個簡單的解釋。作業系統在裝載程式之後,首先執行的不是main程式的第一行,在執行mian主函式之前其實還有一些別的 需要執行,這些 負...
C語言中如何在main函式開始前執行函式
在gcc中,可以使用attribute關鍵字,宣告constructor和destructor,如下 cpp view plain copy print?include attribute constructor void before main attribute destructor void ...