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

EasyC++,函數和語言鏈接性

開發 后端
關于const的含義和使用我們之前已經討論過了,但const限定符對于默認存儲類型是有影響的。

 [[437583]]

大家好,我是梁唐。

想要追求更好閱讀體驗的同學,可以點擊「閱讀原文」訪問github倉庫。

const

關于const的含義和使用我們之前已經討論過了,但const限定符對于默認存儲類型是有影響的。

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

這個設定看起來有些令人費解,其實是編譯器中的一個優化。因為我們常常將一組常量放在頭文件當中,并且在多個文件當中include這個頭文件。如果const聲明的鏈接性也是外部的,根據單定義規則,這會出錯。正是為了避免這種情況發生,所以編譯器做了優化,規定了const關鍵字修飾的全局變量,鏈接性也為內部。

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

  1. extern const int states = 30; 

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

函數和鏈接性

和變量一樣,函數也有鏈接性。和C語言一樣,C++不允許在一個函數當中定義另外一個函數,因此所有函數的存儲持續性都默認是靜態的,即在整個程序運行期間都一直存在。

在默認情況下,函數的鏈接性是外部的,也就是說可以跨文件使用。我們可以使用關鍵字static來講函數的鏈接性設置成內部的,這樣就只有當前文件可以使用。

我們必須同時在原型和定義當中使用static:

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

單定義規則對于函數也一樣適用,也就是說對于非內聯性函數來說,程序只能包含一個定義。對于鏈接性為外部的函數,只有一個文件包含該函數的定義。但使用該函數的每個文件,都應該包含函數的原型。

簡單來說,這就是為什么我們通常將函數的原型寫在頭文件當中,而實現單獨放在另外一個cpp文件中的原因。因為這樣,所有include該頭文件的文件都包含了函數的原型,但只有對應的cpp文件擁有函數的定義。這樣就保證了一定不會違反單定義規則。

語言鏈接性

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

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

如果要在C++程序當中使用C庫中預編譯的函數可能就會名稱對不上,所以為了解決這個問題,我們可以用函數原型來指出要使用的約定:

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

第一個原型使用的C語言鏈接性,后面兩個使用的都是C++語言鏈接性。只不過第二個是通過默認方式實現的,而第三個是顯式指出的。

本文轉載自微信公眾號「Coder梁」,可以通過以下二維碼關注。轉載本文請聯系Coder梁公眾號。

 

責任編輯:武曉燕 來源: Coder梁
相關推薦

2021-12-09 10:56:50

函數C++原型

2021-12-10 10:45:36

C++函數Stock

2021-12-11 19:02:03

函數C++對象

2021-12-12 18:13:54

C++This指針

2021-12-29 20:31:40

C++多態指針

2021-11-09 10:38:16

C++Const指針

2021-11-10 10:48:36

C++函數指針

2021-11-26 10:56:28

C++存儲持續性

2021-11-26 00:03:20

C++編譯常量

2021-12-08 10:43:09

C++實現

2021-10-26 00:19:51

C++結構體存儲

2021-12-30 14:58:58

C++函數動態

2021-11-27 11:50:09

C++靜態持續

2021-12-03 10:48:18

Using編譯指令

2022-01-07 15:10:53

C++動態內存

2021-12-01 10:50:31

C++存儲動態

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++運算符重載
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久综合久 | 成人做爰www免费看视频网站 | 日本一区二区高清不卡 | 国产精品久久久久久久免费大片 | 亚洲精品乱码久久久久久按摩观 | 成人午夜精品 | 欧洲亚洲一区二区三区 | 日韩a在线| 一区二区视屏 | 欧美日韩一区二区三区视频 | 97热在线 | 精品国产欧美一区二区三区成人 | 91亚洲欧美 | 久久精品国产亚洲一区二区三区 | 欧美久久久久久 | 国产高清区 | 久久性色 | 懂色中文一区二区三区在线视频 | av片网站| 久久久久国产一区二区三区不卡 | 亚洲网站在线观看 | 在线色网站 | 亚洲视频免费播放 | 久久精品欧美一区二区三区不卡 | 日韩在线中文字幕 | 久久se精品一区精品二区 | 久久国产精品免费一区二区三区 | 亚洲高清视频一区二区 | 91精品国产91久久久久福利 | 精品中文字幕一区 | 中文字幕第一页在线 | 欧美一区二区三区在线观看 | 一区二区三区国产精品 | 欧美一区二区三区在线看 | 久久久久免费观看 | 欧美一区二区免费在线 | 国产精品永久久久久 | 中文字幕国产 | 玖玖国产| 狠狠色综合久久丁香婷婷 | 欧美精品一区二区三区在线播放 |