1 / 24

Extern 修飾詞

extern. Extern 修飾詞. extern. 變數在全域中不能重複宣告相同的變數名稱,但不同程式碼可能會用到相同的變數。 extern 修飾詞代表這個變數宣告在其他地方。 函數也可加上 extern ,但是可加可不加 ( 函數模型 ) EX : void func ();  extern void func ();. extern example. // XD.c int XD=100; ------------------------------------------------------ // main.c

nedra
Download Presentation

Extern 修飾詞

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. extern Extern修飾詞

  2. extern • 變數在全域中不能重複宣告相同的變數名稱,但不同程式碼可能會用到相同的變數。 • extern 修飾詞代表這個變數宣告在其他地方。 • 函數也可加上extern,但是可加可不加(函數模型) • EX : void func();  extern void func();

  3. extern example • //XD.c • int XD=100; • ------------------------------------------------------ • //main.c • #include<stdio.h> • extern int XD; • int main(){printf(“%d\n”,XD);}

  4. extern的初始化 • 若在宣告具有extern修飾的變數時初始化,會視為沒有extern,需要特別注意。 • extern int XD=2; •  • Int XD=2;

  5. static Static修飾詞

  6. static變數 • 經由static修飾過的變數,經過宣告後,記憶體就不會改變,下次執行時不再重新宣告。 • void GO(){ static int c=0;printf(“%d\n”,++c);} • int main(){inti; for(i=0;i<10;i++) GO();}

  7. static的另一個意義 • 加上static修飾詞的變數(或函數),只會被允許在這個檔案中使用,其他程式碼都無法使用。

  8. gcc compiler GCC

  9. gcc • gcc是C的編譯器,在UNIX環境下可以直接使用,在windows環境下可以下載或從Dev-C++資料夾中的bin資料夾中找到。 • 在windows環境下若設環境變數,則可在commandline直接呼叫。

  10. 使用gcc編譯檔案 • $gcc -o 輸出檔名 要編譯的檔案(s) • 若無指定輸出檔名,UNIX下預設為a.out,windows下預設為a.exe。

  11. 編譯的過程 • 編譯檔案(將原始碼編譯) • 產生目的檔(產生.o檔) • 鏈結函式庫(根據目的檔及使用者的指令鏈結需要用到的函式庫) • 產生執行檔(產生最後的執行檔)

  12. 使用gcc產生目的檔 • $ gcc –c 原始碼.c • 則會產生原始碼.o的目的檔 • 若要將目的檔產生執行檔,與一般的編譯方式相同。

  13. 編譯優化參數 • -O0:預設狀態 • -O1:初步最佳化 • -O2:進一步最佳化,為推薦的優化。 • -O3:不要用,很可怕。最危險的編譯等級,有可能發生錯誤,在gcc4.x中甚至不被推薦使用。 • -pipe:加速編譯時間,對結果無影響。

  14. MakeFile

  15. make • make是一個很方便的工具,可以依據提供的描述檔,迅速幫你執行完很多編譯相關的指令。 • 與gcc相同,UNIX環境下有預設,windows環境下則需要下載並設定環境變數。

  16. 最簡單的編譯 • $make code • $gcccode.c -o code • 這是make沒有其他參數的情況 • 需要特別注意這邊的檔名不加附檔名 • 若附檔名為c以gcc編譯,若為cpp則以g++編譯。

  17. 描述文件 • make的描述文件代表的是程式碼與程式碼之間的依賴關係(規則),並依照此關係依序編譯。 • 目標檔案:需要檔案1 需要檔案2… • <TAB>產生指令 • all:test.o test2.o • gcctest.o test2.o -o test.exe • test.o:test.c • gcc -c test.c • Test2.o:test2.c • gcc -c test2.c

  18. make的執行過程 • make會從名稱為all(不一定產生的檔名就叫做all)的規則執行(若沒有all則從第一個執行) • 接著尋找目錄中是否存在所有需要檔案,若有缺少則尋找其他規則是否可以產生需要檔案。

  19. 描述文件的位置 • make -f 描述文件 • 若沒有特別指定,make或尋找檔名為Makefile或makefile的文件

  20. #include<signal.h> Signal handling

  21. Signal • <signal.h>提供了一個手段(signal function),可以在當程式發生不可預期情況(例如ctrl+c,除以0…等等)時,作例外處理。 • 當然,使用的時候就要include<signal.h>

  22. Signal常數 節自上課投影片

  23. Signal函式 • *signal( int signal, void (* func) (int)) • Signal函式會偵測常數為signal的狀況,並以func例外處理,並回傳函數的指標,如果發生錯誤會回傳SIG_ERR。

  24. raise函式 • raise(int signal); • 直接造成某種signal發生。

More Related