欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9456|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

多個c文件共享同一個變量(全局變量)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:105323 發(fā)表于 2016-3-4 01:23 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
記得還是大二的時(shí)候,只會if else這些,所有的代碼都是在同一個main.c文件中!!!這是何等的搞笑啊,現(xiàn)在想想都覺得好笑,不過很開心我現(xiàn)在終于會把自己寫的東西保存起來,因?yàn)闆]準(zhǔn)哪天會用到,畢竟自己寫的,自己知道怎么去改,既然當(dāng)了程序員,那么就要將基礎(chǔ)學(xué)好咯,以上都是廢話。
This isa 華麗的分割線----------------
多個源文件共享同個變量的方法當(dāng)然就是extern關(guān)鍵字了
extern:extern可置于變量或者函數(shù)前,以表示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量和函數(shù)時(shí)在其他模塊中尋找其定義。另外,extern也可用來進(jìn)行鏈接指定。
現(xiàn)做如下解釋:
我們可以在一個變量前加一個extern比如:extern unsigned int Test;
那么加上這句話之后,編譯器編譯的時(shí)候(別問我編譯是什么意思)會把Test當(dāng)成是外部的!會在其他地方尋找Test這個變量的定義,如果你只加了個extern那么編譯器就會報(bào)錯滴!比如這樣:
1>main.obj: error LNK2001: 無法解析的外部符號 "int Test"(?Test@@3HA)
1>E:\wtl\test\test\Debug\test.exe : fatalerror LNK1120: 1 個無法解析的外部命令
那么就說明,其實(shí)我們這個extern關(guān)鍵字只是說明我們從外部引用了一個變量,該變量的值叫Test,提醒編譯器要到其他文件中查找該變量!
要想不報(bào)錯,在其他文件加個int Test定義一個名字叫Test的變量吧。這樣就能編譯通過啦,貌似有點(diǎn)離題。表緊!我們趕緊回頭,
那么假設(shè)我有個main.c,source1.c,source2.c那么我想要在main里面定義一個變量,在source1.c跟source2.c都能使用該如何做?很簡單,先在main.c中定義一個值:int data;
那么在兩個點(diǎn)c文件中都加上:externintdata,那么,恭喜你,這個變量能被這三個.c文件共用了,相當(dāng)于一個全局變量了吧。
示例代碼:
Main.c
#include
#include "source1.h"
#include "source2.h"
intdata;
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


如上是結(jié)果,
大家自己理解哈~~~
goodnight~~~
其實(shí)想想原理挺容易懂的
當(dāng)你聲明一個變量的時(shí)候是這樣 unsigned int data =0;
當(dāng)你在另一個源文件中想使用這個變量的時(shí)候。只需要加關(guān)鍵字:externunsigned intdata;(注意,這只是說明這個data是外部的變量,實(shí)際上并不分配存儲空間的。也就是不能初始化!)這樣就很Ok啦。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表