1. 程式人生 > >c++中的static和extern

c++中的static和extern

看到一個大神寫的非常簡單明瞭的回答,特地轉載過來
連結:https://www.zhihu.com/question/265415085/answer/293495989

//是說這個變數是存在,但是不在(可能)當前的編譯單元,後續連結時會在哪裡發現
//大家共用這個全域性變數
//如果在連結的時候,沒有在任何地方發現這個變數的定義
//即沒有不帶 extern 的 int x,報連結錯誤
extern int x; 

//是說這個變數是存在,且只存在當前編譯單元,也可以叫它本地全域性變數。
//可能多個編譯單元都會有這個定義,比如這句寫在一個 header 檔案中
//多個 source 檔案 include 了這個 header 檔案
//那麼每個 source 檔案中都可以使用 x,但是每個 x 是獨立存在
//即在 a.cpp 的 x 就是 a_x,在 b.cpp 的 x 就是 b_x。相互不會影響。
static int x; 

------ 如果需要一個全域性變數在多個原始檔中共用,用 extern

extern.h

extern int x;

然後在某一個原始檔中 externX.cpp,定義 x

#include "extern.h" //這個 include 不要也行
int x = 1;

------ 如果需要每個原始檔中單獨使用一個全域性變數,用 static

static.h

static int x;

然後在所有原始檔中 staticX.cpp,自由使用 x

#include "static.h"
//use x,只屬於每個 cpp 獨立的全域性變數 x

相關推薦

C++staticextern的微妙細節

static和extern在C和C++中可以用來既可以修飾資料(變數和常量),還可以修飾函式。       如果用來修飾變數常量資料識別符號,則static和extern的時間特性(儲存特性)相同的,都是靜態儲存,儲存在全域性資料區,但是static是在定義時生成,而ex

C++ :staticextern的用法總結

1. static關鍵字 1.1 函式和變數宣告(C/C++) static全域性變數: 當宣告一個static全域性變數,則表示靜態全域性變數,和其他變數一樣,存放在.data(初始化了)

c++staticinline關鍵字

1.static 成員變數: static變數屬於類所有,而不屬於類的物件,因此不管類被例項化了多少個物件,該變數都只有一個。在這種性質上理解,有點類似於全域性變數的唯一性。 class CA { public: static int sum; …… public: CA(); …… }; int CA::

C/C++staticconst關鍵字的作用總結

static 關鍵字至少有下列 n 個作用:   (1)函式體內 static 變數的作用範圍為該函式體,不同於auto 變數,該變數的記憶體只被分配一次,因此其值在下次呼叫時仍維持上次的值;   (

C語言】C語言staticextern區別

目錄: 【static】 【extern】 1.static · 定義一個內部函式/變數。 · 宣告一個內部函式/變數。 2.extern · 定義一個外部函式/變數。 · 宣告一個外

C++staticconst關鍵字的作用

修飾 程序 一次 sta 聲明 必須 bsp 進行 函數調用 static 1.static聲明的變量內存只被分配一次。auto變量(局部變量)在棧內存區堆放,static變量存放於數據區,程序結束才會釋放。 2.模塊內聲明的static全局變量,可以被該模塊所有函數訪

c++staticextern

看到一個大神寫的非常簡單明瞭的回答,特地轉載過來 連結:https://www.zhihu.com/question/265415085/answer/293495989 //是說這個變數是存在,但是不在(可能)當前的編譯單元,後續連結時會在哪裡發現 //大家共用這個全域性

C語言關鍵字作用(conststaticextern

儲存型別關鍵字(4個): auto: 宣告自動變數,現在一般不用(auto int a;和int a;一樣) register: 宣告暫存器變數 static: 宣告靜態變數。該變數宣告時系統所分配的

C語言中的staticextern

  怕原作者刪除,所以轉載過來! 原文地址:http://blog.csdn.net/keyeagle/article/details/6708077/          C語言程式碼是以檔案為單位來

C++conststatic修飾場景描述

         在c++中,     static可以在兩種情景下使用,分別是類外和類內; 其中類外的修飾物件可以是區域性變數和全域性變數,被

CC#static關鍵字的作用

1. static 變數  靜態變數的型別說明符是static。靜態變數當然是屬於靜態儲存方式,但是屬於靜態儲存方式的量不一定就是靜態變數。例如外部變數雖屬於靜態儲存方式,但不一定是靜態變數,必須由static加以定義後才能成為靜態外部變數,或稱靜態全域性變數。2. 靜態區域性變數  靜態區域性變數屬於靜態儲

C++Static作用使用方法

1、什麼是static?       static 是C++中很常用的修飾符,它被用來控制變數的儲存方式和可見性。     2、為什麼要引入static?       函式內部定義的變數,在程式執行到它的定義處時,編譯器為它在棧上分配空間,大家知道,函式在棧上分配的空間在此函

C++static extern關鍵字及全域性變數的辨析

全域性變數,就是指那些定義在函式或類之外的變數,它可作為多個類或函式都需要共同使用的變數。 (1)全域性變數會被自動初始化,函式中的變數不會被自動初始化,類中定義的那些成員變數(內建)也不會自動初始化。那麼這裡有一個疑問,為什麼要這樣設定?並且為什麼,程序記憶體區中,分為初

C#&&&,|||區別

.com blank img cnblogs png ref bsp 筆記 區別 當兩者都為邏輯運算符時。 其實沒什麽差別。 &&和||當已經確定結果時,不會對第二個操作數求值。也不知道什麽情況會用到這個差別。做個筆記好了。 http://blog.cs

C++typenameclass的區別

type .get true 能夠 class .... ray pla 依賴 在c++Template中很多地方都用到了typename與class這兩個關鍵字,而且好像可以替換,是不是這兩個關鍵字完全一樣呢? 相信學習C++的人對class這個關鍵字都非常明白,clas

c++static變量有什麽用

text spf 退出 amp 定義 問題 一個 min () 主要有兩點用途。 1.讓一個變量長期有效,而不管其是在什麽地方被申明。比如: int fun1() { static int s_value

C++數字字符串的轉換

oat 不能 ring1 相關 輸出 displays tof spl 進制轉換 1、字符串數字之間的轉換(1)string --> char * string str("OK"); char * p = str.c_str();(2)char * -->

C++static_castdynamic_cast強制類型轉換

tro 父類 虛函數表 找到 virt 內部 pub 判斷 () 在C++標準中,提供了關於類型層次轉換中的兩個關鍵字static_cast和dynamic_cast。 一、static_cast關鍵字(編譯時類型檢查) 用法:static_cast < type-i

C++的###運算符

合並操作 col 否則 未定義 info merge eight 標識符 轉換 #和##運算符 #:構串操作符 構串操作符#只能修飾帶參數的宏的形參,它將實參的字符序列(而不是實參代表的值)轉換成字符串常量 #define STRING(x) #x#x#x #defin

c#ClassStruct使用與性能的區別

回收 數據結構 com 垃圾回收 父類 改變 med .cn 指針 在Unity中很多已經定義為結構體的數據結構 Vector2, Vector3 和 Vector4 Rect Color和Color32 Bounds Touch 1.Class為引用類型,Str