假設有這樣一段程式:
#include
using
namespace std;
int a =12;
// 全域性變數
void
func
(int x)
intmain()
現在希望將func
函式單獨寫為乙個檔案,並將a
定義為全域性變數。
先展示一種錯誤的做法:
// globalvariable.h
#pragma once
int a =12;
// 宣告並定義全域性變數
void
func
(int x)
;// func.cpp
#include
#include
"globalvariable.h"
using
namespace std;
void
func
(int x)
// main.cpp
#include
#include
"globalvariable.h"
using
namespace std;
intmain()
這樣會出現編譯錯誤,提示出現了重複定義:
編譯報錯:重複定義
出現錯誤的原因是:globalvariable.h中進行了全域性變數的宣告與定義(注意區分二者的區別),而func.cpp和main.cpp中都包含了globalvariable.h,即出現了重複定義。
那麼我們只需要在globalvariable.h中利用extern
進行進行宣告,而在func.cpp中進行定義即可。
完整的程式如下:
// globalvariable.h
#pragma once
extern
int a;
// 全域性變數的宣告,且要使用extern關鍵字
void
func
(int x)
;// func.cpp
#include
#include
"globalvariable.h"
using
namespace std;
int a =12;
//全域性變數的定義
void
func
(int x)
// main.cpp
#include
#include
"globalvariable.h"
using
namespace std;
intmain()
執行結果為22
。 C語言全域性變數多檔案使用
c語言全域性變數多檔案使用 定義乙個全域性變數,想在多個檔案中使用,如下 externintvar include var.h intvar 10 include var.h include var.h include var.h 只能在乙個檔案裡面賦初值,否則鏈結出錯。看到個c的題 全域性變數可不...
c 全域性變數,多模組使用
用extern修飾的全域性變數 在test1.h中有下列宣告 ifndef test1h define test1h extern char g str 宣告全域性變數g str void fun1 endif 在test1.cpp中 include test1.h char g str 12345...
c 全域性變數的正確宣告
c 中全域性變數宣告錯誤情況 造成 lnk2005 錯誤主要有以下幾種情況 1 重複定義全域性變數。可能存在兩種情況 a 對於一些初學程式設計的程式設計師,有時候會以為需要使用全域性變數的地方就可以使用定義申明一下。其實這是錯誤的,全域性變數是針對整個工程的。正確的應該是在乙個 cpp檔案中定義如下...