跟同事討論**時,經常冒出宣告乙個變數、定義乙個變數的話。雖然感覺沒什麼差別,但總是混淆不清,心裡難受。查下資料,總結做個筆記總是沒錯的。
一:兩者的定義
用於為變數分配儲存空間,還可為變數指定初始值。程式中,變數有且僅有乙個定義。
用於向程式表明變數的型別和名字,乙個變數可以有多個宣告。在c語言中,所有的變數都必須先宣告後使用。可以用extern這個關鍵字來宣告已經定義的變數。
二:兩者的區別
三:**演示
這邊建立main.c、test.c、test.h三個檔案進行演示。
main.c
#include#include "test.h"
/* * 宣告變數d, 變數d在test.c裡面定義,在這邊或者test.h宣告,
* 才能在main.c裡面呼叫。不宣告的話,編譯會失敗,宣告不分配記憶體。
*/extern int d;
void main()
test.c
#includeint c = 30; /* 定義且宣告變數,同時進行初始化,系統有分配記憶體 */
int d; /* 定義且宣告變數,但不進行初始化,系統有分配記憶體 */
void fun_test()
test.h
#ifndef test_h
#define test_h
extern int c; /* 宣告變數c, 系統沒有分配記憶體 */
extern void fun_test(); /* 宣告函式fun_test */
#endif
編譯執行
laiguoliang@earth:~/test/extern$ ls
main main.c test.c test.h
laiguoliang@earth:~/test/extern$ ./main
a = 10, b = 20
hello test, c = 30, d = 40
c = 30, d = 40
laiguoliang@earth:~/test/extern$
C 變數的宣告與定義
宣告,是用以告訴編譯器型別及其細節,本身並不涉及記憶體分配 定義,即記憶體分配,編譯器將在相對記憶體位址上為其物件定址。定義的同時也作了宣告,當定義的時候我們肯定已經告知編譯器其型別及細節,然後才能分配記憶體。總體來說,它們的根本區別就是有無記憶體的分配,下面具體分析 int x 定義x,已為x分配...
C語言 全域性變數的定義與宣告
c語言中全域性變數的定義與宣告困擾著許多c語言初學者。本文講述了全域性變數定義與宣告的用法,而且本為也將闡述這種用法的內在原理。我們先從兩個錯誤例子引入,以下兩個例程都在vc6.0平台上測試。兩種錯誤例程 1.unresolved external symbol 例子包含兩個c檔案 test.c 和...
C語言的定義與宣告
1.變數的定義 宣告 變數的宣告有兩種情況 1 一種是需要建立儲存空間的。例如 int a 在宣告的時候就已經建立了儲存空間。2 另一種是不需要建立儲存空間的。例如 extern int a 其中變數a是在別的檔案中定義的。前者是 定義性宣告 defining declaration 或者稱為 定義...