c語言 再學習筆記

2021-10-02 20:41:49 字數 1720 閱讀 3171

簡單的來說

在區域性變數前加上 static 可以延長他的生命週期

由 函式呼叫時 延長至 程式存活週期

在全域性變數前加上static 可以減小它的作用域

由 多檔案可見,減小到單檔案內 可見

局變數的說明之前再加以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。而靜態全域性變數則限制了其作用域,即只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用,因此可以避免在其它原始檔中引起錯誤。從以上分析可以看出,把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數後是改變了它的作用域, 限制了它的使用範圍。

例如此時有兩個c檔案

檔案 f1.c

#include

extern int f2a;

extern void f2def();

int main(

)}

檔案 f2.c

#include

int f2a=2;

void f2def(

)

當 f2.c中的變數以及方法沒有加static的時候,

gcc f1.c f2.c -o main && ./main

f2a=3

....

f2a=10

修改f2.c

#include

int f2a=2;

static void f2def(

)

gcc f1.c f2.c -o main && ./main

/tmp/cc19v63d.o: in function

`main':

f1.c:(.text+0xc): undefined reference to `

f2def'

collect2: error: ld returned 1 exit status

編譯提示找不到 f2def 函式

簡單來講

include<> 只會搜尋系統標準庫

include" " 還會搜尋當前資料夾

所以在使用當前資料夾自定義c檔案時,請使用include 「」

當是使用標準庫的檔案的時候,為了提高搜尋速度,建議使用 include<>

include 和extern 的區別在於。 include 引入外部變數的時候,

只需要編譯include 拓展之後可以包含 int main的檔案就好了,gcc 乙個檔案

但是,使用 extern 需要手動 gcc 檔案1 檔案2

具體例子

f1.c

#include "f2.c"
f2.c

#include

void f2def(

)int f2a=100;

int main(

)

gcc f1.c -o main && ./main

這是檔案2的函式

f2a=100

C語言再學習 函式

一 函式概述 1 首先什麼是函式?函式是用於完成特定任務的程式 的自包含單元。2 為什麼使用函式?第 一 函式的使用可以身故重複 的編寫。第 二 函式使得程式更加模組化,有利於程式的閱讀修改和完善。3 main函式原型 int main int argc,char argv,char envp 第乙...

C語言再學習 轉義字元

編輯 所有的轉義字元和所對應的意義 轉義字元 意義 ascii碼值 十進位制 a 響鈴 bel 007 b 退格 bs 將當前位置移到前一列 008 f 換頁 ff 將當前位置移到下頁開頭 012 n 換行 lf 將當前位置移到下一行開頭 010 r 回車 cr 將當前位置移到本行開頭 013 t ...

C語言再學習 宣告與定義

什麼是定義?什麼是宣告?它們有何區別?舉個例子 a int i b extern int i 關於 extern,後面解釋 哪個是定義?哪個是宣告?或者都是定義或者都是宣告?我所教過的學生幾乎沒有一 人能回答上這個問題。這個十分重要的概念在大學裡從來沒有被提起過!什麼是定義 所謂的定義就是 編譯器 ...