C語言main函式和程式執行學習筆記

2021-08-15 03:24:08 字數 1642 閱讀 8450

main函式

正確寫法

int main(void)

int main(int argc,char ** argy)

int main(int argc,char* argy)

錯誤寫法,不標準(執行起來沒有任務問題,但是其實某些編譯器不行,或者父程序拿不到這樣的返回值)

void main()

float main()

main函式返回給誰

1.函式為什麼需要返回值:

返回值是函式的輸出,也是乙個值。

main函式被誰呼叫

1.main函式是特殊的,首先main這個名字是特殊的,其它函式不能使用該函式名,main函式是程式的整個入口。,其它函式都會被它直接或間接呼叫

2.main開始代表當前程式開始,main結束代表整個程式結束。

3.誰執行了程式,誰就呼叫了main

4.誰執行了程式?或者說程式有哪幾種被呼叫執行的方式?

linux下程式執行的幾種方式

1.命令列執行./hello執行程式

2.通過shell指令碼呼叫執行程式

3.在程式中呼叫另外乙個程式(system函式(fork exec))

程序和程式之間的關係

程序的生命週期:建立,載入,執行,消亡

建立乙個新的程序(建立),然後把程式丟進這個程序(載入)去執行(執行)直到結束(消亡)。

新程序是被誰建立的?

其實都是被它的父程序呼叫的。

例如:命令列本身就是乙個程序,在命令列中執行./hello執行乙個程式,其實就是將這個程式作為命令列的乙個子程序去執行。

所以說main函式返回給呼叫這個函式的父程序,一般返回0表示執行成功,返回負值表示失敗(shell指令碼會把main函式返回值放在$?符號中)

誰給main函式傳參

(1)父程序給main函式傳參,並接收main返回值。

(2)argc(表示我們給main傳了幾個引數)和argv(傳參的陣列,argv[0]是./hello執行命令)是c語言預定義的。

傳參的本質:

父程序fork乙個子程序,然後子程序和乙個程式繫結起來,然後再去執行exec,然後在exec的時候同時傳入引數。

c語言中的null

1.null不是c語言關鍵字,本質上是乙個巨集定義

#ifdef _cplusplus(c++的意思,為了區分c語言和c++,看是c語言編譯器還是c++編譯器)

#define null 0

#else

#define null (void *)0 //c語言的null,表示指標變數的值是0,也就是指標變數指向0位址,但長度不知道

#endif

null的本質是0,但是不是當作乙個數字來解析的,是當作位址0x0000 0000來解析的,代表記憶體的0位址

int *p;//p是乙個函式內的區域性變數,p是隨機的,野指標

int *p = null,表示p是乙個函式內的區域性變數,指標指向記憶體的0位址,這時候p就不是野指標了。

float a = 12.34

int b = (int)a

問:為啥a的值還是12.34

是因為有臨時匿名變數,將12.34的整數部分12方在另外乙個地方,然後再賦值到b中,然後再銷毀這個臨時匿名變數

C語言main函式

c語言中main函式是可以帶引數的,平時寫倒是沒怎麼用這個引數,學習了一下這個引數。c語言規定了main函式只能有兩個引數,並且其型別也規定了,習慣上把他們寫成 main int argc char argv 第乙個引數是整形,第二個引數是指向字串的指標陣列,為什麼這麼定義?有什麼用?c語言還規定了...

C語言中沒有main函式生成可執行程式的幾種方法

1 define預處理指令 這種方式很簡單,只是簡單地將main字串用巨集來代替,或者使用 拼接字串。示例程式如下 include define begin main int begin void include define begin m a i n int begin void 嚴格來說,這種...

C語言 設定在main 之前執行的函式

include void before attribute constructor void after attribute destructor void before void after int main int argc,char argv 指定了函式在main之前或之後執行。當然也可以指派...