關於extern以及原始檔和標頭檔案的應用
阿新 • • 發佈:2018-11-08
最近在糾結這個問題,全域性變數的宣告到底應該在原始檔還是標頭檔案中,其實有兩種方法:
緣由:因為 int a;表示的是一個定義,而extern int a;卻是一個宣告
方法一:在a.h中表示全域性變數的宣告:extern int a;
在a.c中進行全域性變數的定義:1)exetrn int a = 5; 會跳出警告( a.c:3:12: warning: 'a' initialized and declared 'extern' [enabled by default] ),意思是你在標頭檔案中進行了extern的宣告,定義的時候已經預設使用extern的初始化和宣告,即使用2)種方法進行定義
2)int a = 5;
在b.c檔案中使用的時候 (extern int a;)可以不寫,程式會在別的模組中去找 a 的連結。
方法二:不在a.h檔案中進行宣告,直接在a.c 中進行宣告和定義: int a = 5,但是在b.c檔案中使用的時候必須加上 extern int a;的全域性變數的宣告,否則會跳出以下提示:
b.c:8:2: error: 'a' undeclared (first use in this function) 即:a沒有定義。
兩種方法均在 Debian 3.2.54-2 i686 GNU/Linux 的系統上做過測試。