多個源文件共享同個變量的方法


  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是外部的變量,實際上並不分配存儲空間的。也就是不能初始化!)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM