宣告和定義

2021-05-22 23:07:37 字數 747 閱讀 7816

宣告:函式或變數會在某處出現,在此處,該函式或變數長這樣。

定義:這就是這個函式或者變數。定義處,為函式或變數分配儲存空間。

乙個變數或函式,只能有乙個定義。one definition rule.定義也可以是宣告。

如果乙個變數或者函式有多個檔案要用,可以用extern.extern

的原理很簡單,就是告訴編譯器:「你現在編譯的檔案中,有乙個識別符號雖然沒有在本檔案中定義,但是它是在別的檔案中定義的全域性變數,你要放行!」

這裡有extern的詳細分析。

其實,在應用中,我記得effective c++是不推薦用extern的,具體怎麼做,我忘記了。我一直在用extern其實。借用我老公寫的程式,把定義和宣告放在乙個.h檔案了。然後,用到這個的都包含進來,但是要遵循one definition rule,所以如果已經宣告過某個變數了,那就沒有extern,反之,如果宣告過了,則此時該定義了,此時無extern.從而這樣實現了公有變數的定義。

題目:在c++ 程式中呼叫被 c 編譯器編譯後的函式,為什麼要加 extern 「c」?

答:c++語言支援函式過載,c語言不支援函式過載。函式被c++編譯後在庫中的名字與c語言的不同。

例如某個函式的原型為: void foo(int x, int y);

該函式被c編譯器編譯後在庫中的名字為_foo,而c++編譯器則會產生像_foo_int_int之類的名字。

c++提供了c連線交換指定符號extern「c」來解決名字匹配問題。

宣告和定義

宣告 向計算機介紹名字,它說,這個名字是什麼意思 而 定義 為這個名字分配 儲存空間。無論涉及到變數時還是函式時含義都一樣。無論在哪種情況下,編譯器都在 定義 處分配儲存空間。對於變數,編譯器確定這個變數佔多少儲存單元,並在記憶體中產生存放它們 的空間。對於函式,編譯器產生 並為之分配儲存空間。函式...

宣告和定義

在宣告部分出現變數有兩種情況 1 一種是需要建立儲存空間的,如 int a 2 另一種是不要建立儲存空間的,如 extern int a 前者是 定義性宣告 defining declaration 或者稱為 定義 definition 後者是 引用性宣告 referencing declarati...

宣告和定義

函式或者變數的宣告在程式中可以出現多次,但是函式或者變數的定義只能夠出現一次,因此,一般把宣告放在標頭檔案中,把定義放在cpp檔案中。1 關於變數的宣告和定義 在標頭檔案中寫 int g ntmp,編譯器會認為這是乙個定義,因此在鏈結的時候會出錯 解決這個問題有兩個辦法 1 寫成const int ...