通過使用extern關鍵字,可以在乙個原始檔中定義變數,在其他原始檔中訪問該變數,實現不同源檔案共享變數。即:
在test1.cpp中定義變數a並初始化:
int a = 1; //在test1.cpp中定義變數a,其初始值賦為1
在test2.cpp宣告外部變數a,就可以直接訪問變數a了:
extern int a; //在test2.cpp中宣告外部變數a,告訴編譯器在本檔案中訪問變數a時,應該從其他原始檔中查詢該變數的定義
std::cout << a << std::endl;
同理,在test3.cpp宣告外部變數a,也可以直接訪問變數a了:
extern int a; //在test3.cpp中宣告外部變數a,告訴編譯器在本檔案中訪問變數a時,應該從其他原始檔中查詢該變數的定義
std::cout << a << std::endl;
這樣就實現了test1、test2和test3共享變數a,其中任一檔案修改變數a,其他檔案都可以同步訪問。
注意:乙個變數可以多次宣告,但不可以多次定義。因此,下面的寫法是錯誤的:
在test1.cpp定義變數a,其初始值賦為1:
int a = 1;
在test2.cpp定義變數a,其初始值賦為1,同時宣告該變數為外部變數:
extern int a = 1;
std::cout << a << std::endl;
編譯器會報錯變數a重定義,因為變數a同時在原始檔test1.cpp和test2.cpp進行了定義。
當然,要實現在test1.cpp中定義,在test2.cpp和test3.cpp中使用,也可以通過公用標頭檔案簡化編碼,即只需要在標頭檔案中宣告一次外部變數,在所有原始檔直接#include標頭檔案即可:
在test.h宣告外部變數a:
#pragma once
//在test.h中宣告變數a為外部變數
//注意:這裡只能宣告,不能定義,即不能給a賦初值,否則編譯時會報「a重定義:多次初始化」的錯誤
extern int a;
在test1.cpp引用標頭檔案test.h,對變數a進行初始化:
#include "test.h"
//在test1.cpp中定義變數a,其初值賦為1
int a = 1;
在test2.cpp引用標頭檔案"test.h",就可以直接訪問變數a了:
#include "test.h"
std::cout << a << std::endl; //由於test2.cpp引用了標頭檔案test.h,所以不需要再次宣告變數a,直接引用即可
a = 2; //當然,在test2.cpp中除了可以訪問變數a,也可以修改變數a
t同理,在test3.cpp引用標頭檔案"test.h",也可以直接訪問變數a:
#include "test.h"
std::cout << a << std::endl; //同理,test3.cpp也引用了標頭檔案test.h,所以不需要再次宣告變數a,直接引用即可
多個檔案共享結構體變數
一 c語言如何呼叫其他檔案定義的結構體成員 1 假設有a b兩個檔案 做法一 在a.c中定義結構體 struct student strstudent 10 在a.h中寫明結構體的具體成員 struct student char name int age int b檔案中引用a檔案中結構體 incl...
python 多個檔案共享全域性變數
global關鍵字可以宣告全域性變數,但僅限於乙個檔案中 其他檔案可以通過import匯入,但修改並不影響原始值 若想在不同模組 py檔案 中使用同乙個全域性變數,可以使用以下方法 專門為全域性變數定義乙個 全域性變數管理模組 1.全域性變數管理模組 globalvar.py def init 初始...
gcc 編譯多個原始檔
一.常用編譯命令選項 假設源程式檔名為test.c。3.選項 e 用法 gcc e test.c o test.i 作用 將test.c預處理輸出test.i檔案。4.選項 s 用法 gcc s test.i 作用 將預處理輸出檔案test.i彙編成test.s檔案。5.選項 c 用法 gcc c ...