Linux下程式設計 主函式傳參

2021-09-25 18:01:11 字數 1518 閱讀 1004

主函式的原型為:

int main(int argc,char *ar**,char *envp);

argc:傳遞的引數列表中引數的個數

ar**:傳遞的引數列表

envp:傳遞的環境變數

我們在linux中編寫乙個主函式,看一下執行結果:

# include# include# include# include# includeint main(int argc,char *ar**,char *envp)

這個程式在沒有執行前,我們認為它執行出來的結果應該是,先列印乙個hello,然後睡眠5秒再列印world,但是實際執行結果卻是如下圖所示:

實際執行結果是,先睡眠了5秒,然後再列印出來「helloworld」,對此很多人都會有疑問,為什麼不是按照順序來執行程式的,其實是這樣的,printf這個函式是首先將「hello"寫到輸出緩衝區,然後再將」world\n"寫到輸出緩衝區,最後再一起列印出來的。輸出緩衝區在記憶體上。

輸出緩衝區重新整理的條件:

1、程式結束,但是以_exit(0)結束的程式不會重新整理緩衝區。

2、遇到「\n」

3、緩衝區滿,現在系統預設最多放1024個位元組

4、主動重新整理,用fflush(stdout)函式

這一次執行結果就是先列印hello,然後睡眠5秒再列印的world。

atexit函式:

函式原型:int atexit (void (*)(void));

它是在正常程式退出時呼叫的函式,我們把他叫為登記函式。⼀個程序可以登記若⼲個函式,這些函式由exit⾃動調⽤,這些函式被稱為終⽌處理函式, atexit函式可以登記這些函式。 exit調⽤終⽌處理函式的順序和atexit登記的順序相反,如果⼀個函式被多次登記,也會被多次調⽤。

例項:

#include#includevoid func1()

void func2()

void func3()

int main()

執行結果:

我們可以看到atexit函式的呼叫順序是和登記順序相反的。

atexit函式的用途也是比較廣泛的:可以按照你預設的順序摧毀全域性變數(類),例如有個log類,你在其它的全域性類裡也有可能呼叫到log類寫日誌。所以log 類必須最後被析構 。假如沒有規定析構順序,那麼程式在退出時將有可能首先析構log類,那麼其它的全域性類在此時將無法正確寫日誌。 把資料寫回檔案, 刪除臨時檔案, 這才是真正有用的.

python 函式傳參 傳參和傳引用

首先還是應該科普下函式引數傳遞機制,傳值和傳引用是什麼意思?函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和引用傳遞。值傳遞 passl by value 過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在...

函式傳值傳參

var obj function x 內部宣告的變數不會影響外面的obj物件 console.log obj.n 2 obj 傳入的是乙個指標 值 x是obj指標的副本,兩者都指向同乙個物件 console.log obj.n 3 例子二 var x 1 function a x a x conso...

linux下的應用模組傳參及驅動模組傳參的區別

在使用者態下程式設計可以通過main intargc,char argv 來傳遞命令列引數,而編寫乙個核心模組則通過module param 來傳遞引數 一.應用程式命令列傳參 執行結果如下 二.核心模組傳參 module param name,type,perm 是乙個巨集,表示向當前模組傳入引數...