C語言變數的宣告與定義

2021-10-02 11:48:15 字數 1133 閱讀 9328

跟同事討論**時,經常冒出宣告乙個變數、定義乙個變數的話。雖然感覺沒什麼差別,但總是混淆不清,心裡難受。查下資料,總結做個筆記總是沒錯的。

一:兩者的定義

用於為變數分配儲存空間,還可為變數指定初始值。程式中,變數有且僅有乙個定義。

用於向程式表明變數的型別和名字,乙個變數可以有多個宣告。在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 或者稱為 定義...