extern可置於變量或者函數前,以表示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找
其定義。
另外,extern也可用來進行鏈接指定。
用法分析:
在一個變量前加extern 比如:extern unsigned int Test;
編譯器編譯的時候,會把Test當成是外部的!會在其他地方尋找Test這個變量的定義,如果只加extern那么編譯器就會報錯!
比如這樣:
1>main.obj : error LNK2001: 無法解析的外部符號 "int Test" (?Test@@3HA)
1>E:\wtl\test\test\Debug\test.exe : fatal error LNK1120: 1個無法解析的外部命令
因為extern關鍵字只是說明我們從外部引用了一個變量,該變量的值叫Test,提醒編譯器要到其他文件中查找該變量!
要想不報錯,在其他文件加int Test 定義一個名字叫Test的變量吧。這樣就能編譯通過。
那么假設我有個main.c,source1.c,source2.c那么我想要在main里面定義一個變量,在source1.c跟source2.c都能使用該如何做?
很簡單,先在main.c中定義一個值:int data;
那么在兩個點c文件中都加上:extern int data,
這個變量能被這三個.c文件共用了,相當於一個全局變量。
示例代碼:
//Main.c
#include
#include "source1.h"
#include "source2.h"
int data;
using namespace std;
void main()
{
data = 4;
adddata2();
cout<<data<<endl;
adddata1();
cout<<data<<endl;
cout<<"hello world "<<endl;
}
//Source1.c
#include "source2.h"
using namespace std;
extern int data;
void adddata2()
{
data = data + 10;
}
//Source.h
#ifndef __SOURCE1_H__
#define __SOURCE1_H__
#include
void adddata1();
#endif
//Source2.c
#include "source1.h"
using namespace std;
extern int data;
void adddata1()
{
data = data + 100;
}
//Source2.h
#ifndef __SOURCE2_H__
#define __SOURCE2_H__
#include
void adddata2();
#endif
多個c文件共享同一個變量(全局變量)
當你聲明一個變量的時候是這樣 unsigned int data = 0;
當你在另一個源文件中想使用這個變量的時候。
只需要加關鍵字:extern unsigned int data;
(注意,這只是說明這個data是外部的變量,實際上並不分配存儲空間的。也就是不能初始化!)
