C中extern const的用法

2022-03-10 17:14:30 字數 5320 閱讀 9133

1樓:匿名使用者

我來說一下,具體原因應該是這個,常變數在定義的時候必須初始化,所以當你在a.cpp中定義extern const double pi=3.14; b.

pp中extern const double pi;可以通過編譯執行。因為當編譯系統發現a.cpp中的全域性常變數時,就知道它pi是常量,而換過來的時候,在a.

cpp中定義const double pi=3.14; b.pp中extern const double pi;編譯系統在編譯a.

cpp是沒有問題的,但到了b.cpp中就會發現,有一個外部常量是沒有初始化的,而常量是不能在宣告後再進行定義的,所以編譯系統會認為找不到它的定義,所以就出錯。

對於extern "c"主要是因為c和c++編譯器不同,它們對相同的函式名編譯後生成的相同的標示不同,故而在引用c的庫檔案時必須使用extern 「c」告訴編譯器,它是c的函式,按c的規則編譯。通常我們使用的標準標頭檔案已被處理過。 貌似沒有用於常量的宣告。

2樓:匿名使用者

在a.cpp中定義extern const double pi=3.14; b.

pp中extern const double pi;可以通過編譯執行。在a.cpp中定義const double pi=3.

14; b.pp中extern const double pi;編譯失敗。

沒有看懂!

變數用extern 表示外部變數。後面沒有賦值表示引用其它地方的,叫宣告變數,有賦值就是定義一個全域性變數與不用extern是一樣的。extern "c"加在變數前沒有什麼意義,函式才有意義。

c語言的函式是加下劃線到函式名前,如定義一個void func(),實際的函式名就是_func,c++的就很複雜了,而且不同的編譯器也不一樣,主要是要處理函式過載,它會把引數的型別通過一個的命名規則把它加到函式名上去,加上extern "c"可以強制它與c語言的命名規則來處理。沒有什麼誰比誰規範的。

3樓:

對於c++的全域性變數宣告問題:

在一個原始檔中比如a.cpp中,可以在全域性作用域中隨意定義一個比如:int ndata = 0;

要在另外一個比如b.cpp中對此變數進行引用可以這樣宣告extern int ndata;

在c++中const有限定變數作用域的作用,它限制變數只在本編譯單元內可以使用,你第一次之所以能夠成功,是因為加了extern

c++中定義變數的時候用extern有什麼用?

4樓:不懂多來問問

extern:這是外部關鍵字。

extern可以置於變數或者函式前,以表示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數和函式時在其他模組中尋找其定義。

如:你在檔案a中定義了int i;

但你在檔案b中需要用到檔案a中的變數i,這時你在使用變數i之前就需要用extern int i來指定說明這是一個外部變數,這時編譯器就會去其它檔案中查詢。(注意,這個外部變數要是在同一個工程下的不同檔案下,才能使用。如果是不同工程中的檔案就不能這樣引出來)。

外部函式也是這樣來引用的,不同檔案中的函式可以使用extern 關鍵字來引出,c++中函式預設都是外部函式,同一個工程下的不同檔案中的函式也不能重名,因為c++預設函式定義時是外部的,當然可以在定義時改為內部,這樣多個檔案中的函式就不會影響。

但extern 還有另一個用處,那就是先使用後定義。如:你想使用變數i,但你不知道要在什麼地方定義i,這時你就可以使用extern 這個關鍵字來達到先使用變數i,再定義變數i的目的。

5樓:千鋒教育

只有宣告的意思,說明這個變數在別的地方已經定義過了。

一般是全域性變數才會加這個宣告,當然,他們是同一個變數。就好比:

1.cpp檔案定義了一個int a,

2.cpp檔案也定義了一個 int a。

這樣他們就有可能重複定義,如果2.cpp中加上extern那麼就知道2.cpp中的a在其他地方定義過了,和1.cpp是一個變數

6樓:匿名使用者

使用在別的.cpp檔案中已經定義好的全域性變數,其他的不用解釋了吧 還不會的@我吧

7樓:金色潛鳥

一般情況下,不須用extern。

extern 通常指 「外部於本定義域的」,它是全域性量,(寫在本檔案裡 或寫在 另一個檔案裡)

程式例子:

#include

#include

int i=111; // 全域性量 imain();

這裡列印出 什麼?列印出 222

return 0;}

8樓:匿名使用者

表示全域性變數定義在其他檔案中

9樓:

在全域性範圍:

int i;這是定義,定義i,初始化為0。

int i = 1;這是定義,定義i,初始化為1。

extern int i = 1;這是定義,定義i,初始化為1。

extern int i;這是宣告,宣告有一個變數i,它的定義可能在其它檔案中。

每個變數定義只能有一處。最好使每個變數都有且僅有一處定義。

extern int i = 1;作用和int i = 1;沒有區別,只是顯式地提醒程式設計師i可能會在其它檔案裡用到。

c++中extern是什麼意思,用法?

10樓:修者世界

extern表示是外部函式或外部變數,比如:

1、extern void add(int x,inty);表示該函式主體不在當前模組中,在另一個模組中(檔案)

2、extern int total;表示該變數在另一個模組總定義過。

11樓:匿名使用者

extern表示宣告一個在其他地方定義過的全域性變數。

(a) extern string name; // name在其他地方定義了(通常是在別的檔案中定義了,但也可以是本檔案中定義的),在這僅僅是重新宣告一下,不會重新定義一個新變數。

string name( "exercise 3.5a" ); // 定義了一個名為name的變數,並設定初始值為"exercise 3.5a"。

(b) extern vectorstudents; // students在其他地方定義了(通常是在別的檔案中定義了,但也可以是本檔案中定義的),在這僅僅是重新宣告一下,不會重新定義一個新變數。

vectorstudents; // 定義一個名為students的變數。

c和c++中const的區別是什麼?請說具體點

12樓:匿名使用者

c中的const,功能比較單一,較容易理解:

作用:被修飾的內容不可更改。

使用場合: 修飾變數,函式引數,返回值等。(c++中應用場合要豐富的多)

特點: 是執行時const,因此不能取代#define用於成為陣列長度等需要編譯時常量的情況。同時因為是執行時const,可以只定義而不初始化,而在執行時初始化。

如 const int iconst;。 另外,在c中,const變數預設是外部連結,因此在不同的編譯單元中如果有同名const變數,會引發命名衝突,編譯時報錯。

c++中的const:跟c中比較,內容要豐富很多,當然,作用也更大了

1:非類成員const

*在c++中,const變數(在這裡涉及的const都不是類中的const,類中的const專門提出來記錄)預設是內部連線的,因此在不同的編譯單元中可以有同名的const 變數定義。

*是編譯時常量,因此可以像#define一樣使用,而且因為上面一點,可以在標頭檔案中定義const變數,包含的不同的cpp檔案(編譯單元)中使用而不引起命名衝突。

*編譯器預設不為const變數分配記憶體,除非:1. 使用 extern 申明, 2:程式中有引用const 變數的地址。

* 可以使用下面的型別轉換(不安全的): 1: int * = (int *)pconst 2: int * = const_castpconst(c++解const屬性cast)

* 函式引數或者返回值能使用 const & or const * 時,儘量使用const屬性,增強程式健全性。

*c++中臨時物件/內建變數預設具有const屬性

2:類中的const

*類中的const與c語言中的const一樣,只是執行時常量,不能作為陣列維數使用,即不能取代#define。在類中使用下面兩種方式取代#define: 1:

static const... 2: enum//enum 不佔儲存空間

*類中的const 變數佔用儲存空間

*類中的const成員變數需要在建構函式初始化列表中初始化

*const 物件:在該物件生命週期內,必須保證沒有任何成員變數被改變。const物件只能呼叫const成員函式。

*const成員函式: void fun() const ... 不僅能被const物件呼叫,也能被非const物件呼叫,因此,如果確認一個任何成員函式不改變任何成員變數,應該習慣性將該函式定義成const型別。

如果const成員函式需要改變成員變數,有兩種實現方式: 1 ,const_castthis強制取消this指標的const屬性。 2:

將被改變的成員變數定義成mutable:mutable int i; //應永遠只使用第二種方法,讓任何閱讀程式的人都知道該變數可能被const函式改變。

*如果一個物件被定義成const,那麼該const物件「可能」會被放入到rom當中,這在嵌入式開發當中有時非常重要。。。。(不能有任何自定義的constructor 和destructor。它的基類或者成員物件不能有自定義的constructor和destructor,不能有任何mutable成員變數)

在c語言中,register,const,static,extern分別都是什麼意思,有什麼用

13樓:每壹段路都是壹種領悟

register修飾符暗示編譯程式相應的變數將被頻繁地使用,如果可能的話,應將其儲存在cpu的暫存器中,以加快其儲存速度。

const限定一個變數不允許被改變。使用const在一定程度上可以提高程式的安全性和可靠性,另外,在**別人**的時候,清晰理解const所起的作用,對理解對方的程式也有一些幫助。

static有兩種用法:程序導向程式設計中的static和麵向物件程式設計中的static。前者應用於普通變數和函式,不涉及類;後者主要說明static在類中的作用。

extern可以置於變數或者函式前,以表示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數和函式時在其他模組中尋找其定義。另外,extern也可用來進行連結指定。

c中的冪怎麼用,C中乘方怎麼輸入

可以呼叫個頭抄檔案裡面有襲個pow函式,函式原型extern float pow float x,float y 呼叫的 時候比說a pow b,2 b就是底數,2就是冪,用這個函式就能進行冪運算了。表示一個數自乘若干次的形式,如a自乘n次的冪為a n 或稱a n為a的n次冪 同意樓上的說法,如果你...

c 中函式過載問題,C 中函式過載有啥用?

list類中是否已宣告瞭兩個過載函式?c 中函式過載有啥用?類的建構函式跟類名相同,即建構函式都同名。如果沒有函式過載機制,要想例項化不同的物件非常麻煩。操作符過載,本質上就是函式過載,它大大豐富了已有操作符的含義,方便使用,例如 可用於連線字串等。過載函式是函式的一種特殊情況,為方便使用,c 允許...

c 中,怎麼用引用,c 中的引用( )到底都有什麼用處?

include include include int find int x,int a i while i 21 return pos void main 隨機產生20個數並且傳給s 20 find s,n 巧妙利用返回的引用函式cout the number is 就是在函式宣告和定義的引數列表...