成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

EasyC++,函數(shù)和語言鏈接性

開發(fā) 后端
關(guān)于const的含義和使用我們之前已經(jīng)討論過了,但const限定符對(duì)于默認(rèn)存儲(chǔ)類型是有影響的。

 [[437583]]

大家好,我是梁唐。

想要追求更好閱讀體驗(yàn)的同學(xué),可以點(diǎn)擊「閱讀原文」訪問github倉(cāng)庫(kù)。

const

關(guān)于const的含義和使用我們之前已經(jīng)討論過了,但const限定符對(duì)于默認(rèn)存儲(chǔ)類型是有影響的。

在默認(rèn)情況下,全局變量的鏈接性是外部的,也就是說所有文件均可使用。但const全局變量的鏈接性是內(nèi)部的,也就是說只能在本文件當(dāng)中使用。全局const定義就好像使用了static說明符一樣。

這個(gè)設(shè)定看起來有些令人費(fèi)解,其實(shí)是編譯器中的一個(gè)優(yōu)化。因?yàn)槲覀兂3⒁唤M常量放在頭文件當(dāng)中,并且在多個(gè)文件當(dāng)中include這個(gè)頭文件。如果const聲明的鏈接性也是外部的,根據(jù)單定義規(guī)則,這會(huì)出錯(cuò)。正是為了避免這種情況發(fā)生,所以編譯器做了優(yōu)化,規(guī)定了const關(guān)鍵字修飾的全局變量,鏈接性也為內(nèi)部。

如果出于某種原因,程序員希望某個(gè)常量的鏈接性為外部的,可以使用extern關(guān)鍵字來覆蓋默認(rèn)的內(nèi)部鏈接性:

  1. extern const int states = 30; 

在這種情況下,必須所有使用了該常量的文件中使用extern關(guān)鍵字來聲明它。然而,由于const在多個(gè)文件之間共享,因此只有一個(gè)文件可以對(duì)它進(jìn)行初始化。

函數(shù)和鏈接性

和變量一樣,函數(shù)也有鏈接性。和C語言一樣,C++不允許在一個(gè)函數(shù)當(dāng)中定義另外一個(gè)函數(shù),因此所有函數(shù)的存儲(chǔ)持續(xù)性都默認(rèn)是靜態(tài)的,即在整個(gè)程序運(yùn)行期間都一直存在。

在默認(rèn)情況下,函數(shù)的鏈接性是外部的,也就是說可以跨文件使用。我們可以使用關(guān)鍵字static來講函數(shù)的鏈接性設(shè)置成內(nèi)部的,這樣就只有當(dāng)前文件可以使用。

我們必須同時(shí)在原型和定義當(dāng)中使用static:

  1. static void test(); 
  2.  
  3. static void test() { 
  4.     return ; 

單定義規(guī)則對(duì)于函數(shù)也一樣適用,也就是說對(duì)于非內(nèi)聯(lián)性函數(shù)來說,程序只能包含一個(gè)定義。對(duì)于鏈接性為外部的函數(shù),只有一個(gè)文件包含該函數(shù)的定義。但使用該函數(shù)的每個(gè)文件,都應(yīng)該包含函數(shù)的原型。

簡(jiǎn)單來說,這就是為什么我們通常將函數(shù)的原型寫在頭文件當(dāng)中,而實(shí)現(xiàn)單獨(dú)放在另外一個(gè)cpp文件中的原因。因?yàn)檫@樣,所有include該頭文件的文件都包含了函數(shù)的原型,但只有對(duì)應(yīng)的cpp文件擁有函數(shù)的定義。這樣就保證了一定不會(huì)違反單定義規(guī)則。

語言鏈接性

背景知識(shí):鏈接程序要求每個(gè)不同的函數(shù)擁有不同的符號(hào)名,比如C語言編譯器可能將spiff函數(shù)翻譯成_spiff,這被稱為C語言鏈接性。而C++當(dāng)中,同一個(gè)名稱可以對(duì)應(yīng)多個(gè)函數(shù)(函數(shù)重載),因此必須將這些函數(shù)翻譯成不同的名稱。

比如spiff(int)可能翻譯成_spiff_i,spiff(double, double)翻譯成_spiff_d_d。這種方法被稱為C++語言鏈接。

如果要在C++程序當(dāng)中使用C庫(kù)中預(yù)編譯的函數(shù)可能就會(huì)名稱對(duì)不上,所以為了解決這個(gè)問題,我們可以用函數(shù)原型來指出要使用的約定:

  1. extern "C" void spiff(int); 
  2. extern void spoff(int); 
  3. extern "C++" spaff(int); 

第一個(gè)原型使用的C語言鏈接性,后面兩個(gè)使用的都是C++語言鏈接性。只不過第二個(gè)是通過默認(rèn)方式實(shí)現(xiàn)的,而第三個(gè)是顯式指出的。

本文轉(zhuǎn)載自微信公眾號(hào)「Coder梁」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Coder梁公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: Coder梁
相關(guān)推薦

2021-12-09 10:56:50

函數(shù)C++原型

2021-12-11 19:02:03

函數(shù)C++對(duì)象

2021-12-10 10:45:36

C++函數(shù)Stock

2021-12-29 20:31:40

C++多態(tài)指針

2021-11-09 10:38:16

C++Const指針

2021-12-12 18:13:54

C++This指針

2021-11-10 10:48:36

C++函數(shù)指針

2021-11-26 10:56:28

C++存儲(chǔ)持續(xù)性

2021-11-26 00:03:20

C++編譯常量

2021-11-27 11:50:09

C++靜態(tài)持續(xù)

2021-12-08 10:43:09

C++實(shí)現(xiàn)

2021-10-26 00:19:51

C++結(jié)構(gòu)體存儲(chǔ)

2021-12-30 14:58:58

C++函數(shù)動(dòng)態(tài)

2022-01-07 15:10:53

C++動(dòng)態(tài)內(nèi)存

2021-12-01 10:50:31

C++存儲(chǔ)動(dòng)態(tài)

2021-12-03 10:48:18

Using編譯指令

2021-10-26 15:36:17

C++枚舉值類型

2021-10-27 16:27:20

C++指針操控

2021-12-05 18:20:42

C++空間特性

2021-12-15 10:25:57

C++運(yùn)算符重載
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 色黄网站 | 天天影视网天天综合色在线播放 | 天天躁日日躁xxxxaaaa | 精品国产免费人成在线观看 | 色综合99| 日韩色在线 | 一级免费毛片 | 色资源在线 | 秋霞a级毛片在线看 | 免费在线观看成人av | 国产欧美日韩在线观看 | 中文字幕人成乱码在线观看 | 成人免费在线视频 | 国产在线视频一区二区 | 黄色免费观看网站 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 成年人免费看的视频 | 开操网| 日本 欧美 三级 高清 视频 | 国产中文字幕av | 天天操天天玩 | 亚洲一区自拍 | 三级av在线 | 欧美中文在线 | 久久精品美女 | 国产精品爱久久久久久久 | 日韩国产在线 | www.日韩系列 | 在线播放国产一区二区三区 | 国产精品一区二区三区四区五区 | 久久中文字幕电影 | 久久综合伊人 | 欧美一区二区大片 | www.色综合| 亚洲永久免费 | 羞羞的视频在线 | 国产精品久久久久国产a级 欧美日韩国产免费 | 久久亚洲国产精品日日av夜夜 | jvid精品资源在线观看 | 久久国产区 | 亚洲一区二区三区在线播放 |