1. 程式人生 > >關於extern以及原始檔和標頭檔案的應用

關於extern以及原始檔和標頭檔案的應用

最近在糾結這個問題,全域性變數的宣告到底應該在原始檔還是標頭檔案中,其實有兩種方法:

緣由:因為 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 的系統上做過測試。