1. 程式人生 > >【C語言】C語言的const與C++的const區別

【C語言】C語言的const與C++的const區別

C++中,const預設使用內部連線.而C中使用外部連線.
內連線:編譯器只對正被編譯的檔案建立儲存空間,別的檔案可以使用相同的表示符
或全域性變數.C/C++中內連線使用static關鍵字指定.
外連線:所有被編譯過的檔案建立一片單獨儲存空間.一旦空間被建立,聯結器必須解
決對這片儲存空間的引用.全域性變數和函式使用外部連線.通過extern關鍵
字宣告,可以從其他檔案訪問相應的變數和函式.
************************C++程式碼******************************
header.h
const int test = 1;
test1.cpp
#include
#include "header.h"

using namespace std;
int main()
{
cout << "in test1 :" << test << endl;
}
test2.cpp
#include
#include "header.h"
using namespace std;
void print()
{
cout << "in test2:" << test << endl;
}
以上程式碼編譯連線完全不會出問題,但如果把header.h改為:
extern const int test = 1;
在連線的時候,便會出現以下錯誤資訊:
test2 error LNK2005: "int const test" (
[email protected]@3HB) 已經在 test1.obj 中定義
因為extern關鍵字告訴C++編譯器test會在其他地方引用,所以,C++編譯器就會為test建立儲存空間,不再是簡單的儲存在名字表裡面.所以,當兩個檔案同時包含header.h的時候,會發生名字上的衝突.
此種情況和C中const含義相似:
header.h
const int test = 1;
test1.c
#include
#include "header.h"
int main()
{
printf("in test1:%d/n",test);
}
test2.c
#include
#include "header.h"

void print()
{
printf("in test2:%d/n",test);
}
錯誤訊息:
test3 fatal error LNK1169: 找到一個或多個多重定義的符號
test3 error LNK2005: _test 已經在 test1.obj 中定義
C++中,是否為const分配空間要看具體情況.
如果加上關鍵字extern或者取const變數地址,則編譯器就要為const分配儲存空間

相關推薦

NIO引入BIO、AIONIO的區別

同步非同步與阻塞非阻塞的區別 1.同步 例:買飯:自己親自去飯館買飯,這就是同步(自己處理IO讀寫) 2.非同步 例:買飯:叫外賣送到家,這就是非同步(IO讀寫委託給OS處理,需要將資料緩衝區地址和大小傳給OS(飯名和地址),OS需要支援非同步IO操作A

運動控制運動控制卡PLC的區別

運動控制卡與PLC都是控制器,主要負責工業自動化系統中運動軸控制、輸入輸出訊號控制; 運動控制卡:基於PC介面,由於PC機的強大功能,因此與其一起組成的運動控制器功能最強,但其工作穩定性、可靠性較差。運動控制卡通過PCI插槽將控制卡插在PC的主機上;利用高階程式語言C++

C語言C語言constC++的const區別

C++中,const預設使用內部連線.而C中使用外部連線.內連線:編譯器只對正被編譯的檔案建立儲存空間,別的檔案可以使用相同的表示符或全域性變數.C/C++中內連線使用static關鍵字指定.外連線:所有被編譯過的檔案建立一片單獨儲存空間.一旦空間被建立,聯結器必須解決對這片儲存空間的引用.全域性變數和函式使

C語言求階乘階乘之和

  中學我們都學習了階乘的求法,比如要求整數n的階乘,則n!=n×(n-1)×(n-2)×…×2×1。現在有兩個問題,要用C語言編寫程式求n的階乘,以及求1!+2!+3!…+n!,該如何解決呢?   問題1:求n的階乘。   實現思路:   問題中的n需要

C語言誰是冠軍 誰是凶手

1. 5位運動員參加了10米臺跳水比賽,有人讓他們預測比賽結果 A選手說:B第一,我第三。 B選手說:我第二,E第四。 C選手說:我第一,D第二。 D選手說:C最後,我第三。 E選手說:我第四,A第一。 比賽結束後,每位選手都說對了一半,請程式設計

C語言對字母加密解密(簡易)

/* * 從鍵盤輸入一行字元,將其中的英文字母進行加密輸出(非英文字母不用加密)。 * 字元的加密就是藉助字元可以進行算術運貧的思想來設計實現,加密的基本思想是, * 將原來的字元向後移動若干位 S 示 ,這個操作可以通過字元加上一個整數來實現,所加的整數

C語言malloc,calloc,realloc的區別

很多小夥伴都不知道malloc、calloc、realloc的區別,所以這次小編蒐集點乾貨給大家分享。 C語言跟記憶體分配方式 <1>從靜態儲存區域分配. 記憶體在程式編譯的時候就已經分配好,這塊記憶體在程式的整個執行期間都存在.例如全域性變數、static變數

編譯原理利用Flex工具生成C語言詞法分析器

Flex構造C語言詞法分析器 可以識別大部分的C語言關鍵字和識別符號,可以去除註釋(多行單行都可以),可以識別整數和浮點數,可以識別錯誤的浮點數。 lex檔案結構: [第一部分:定義段] /* *按照C語言語法,宣告檔案包含,巨集定義,常數定義,全域性

C語言觀察者模式用C語言實現

《C語言實現觀察者模式》 說明: 本例中使用了連結串列資料結構,該結構移植自linux核心原始碼的連結串列,使用方法見我的另一篇部落格,地址:【點選此處檢視連結串列使用方法】

初涉C語言程式設計師歡迎來到C語言的世界!

計算機發展史 機器語言 所有的程式碼裡面只有0和1 優點:直接對硬體產生作用,程式的執行效率非常高 缺點:指令又多又難記、可讀性差、無可移植性 組合語言 符號化的機器語言,用一個符號(英文單詞、數字)來代表一條機器指令 優點:直接對硬體產生作用,程式的執行效率非

程式語言在Unity3D中的C#程式設計初級

一、前言 這篇文章主要是給零基礎想要Unity入門的關於C#程式設計的一些意見 二、參考文章 三、正文 1、支援Unity3D的程式語言 C#、JavaScript、UnityScript 先說C#與JavaScript,因

編程語言吐槽之JavaC

編程語言 用途 評價 語言 計算 競爭力 理念 部署 direct 包含各種偏見和武斷,請謹慎閱讀。 為什麽在學校學習的C,拿到企業生產中不起作用? 而為什麽企業級的程序員,依然對C/C++無法掌控?在算法各方面不夠精湛? 根本原因還是應用場景的不同。企業級的開發

C語言中的結構體C++中的類異同

從C語言到C++,是程式設計思想的進步,技術發展的結果吧,所以C++基本上是相容C的語法的,C++的很多東西也是從C中繼承過來的,然後再發揚,C語言的結構體便是C++中類的雛形。         簡單的一句話,C語言中的結構體是C++中類的祖先,也可以說C++中的類是C語

決策樹ID3演算法理解R語言實現

一、演算法理解 想來想去,還是決定用各大暢銷書中的相親例子來解釋什麼叫決策樹。 簡單來說,決策樹就是根據各種變數,作為輸入條件,最終輸出決策的過程。比如上圖中女方在相親過程中,影響是否見男方的變數有年齡、長相、收入、是否是公務員等。 最終在各種變數組合下,最終輸出見或不

c++:資料型別和運算子(c語言的不同)

c++的標頭檔案與c語言的不同:c++增加的資料型別:結構體的區別:強制型別轉換:c語言需要括號+轉換型別來轉換;c++不需要括號,直接型別(引數),類似於函式的引數傳遞;動態分配記憶體空間:p3=ne

入門篇Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署發布

框架 logs ice term con scrip 什麽 5.1 cal 由於最近工作的需要,本人學習了一下利用高性能web server - Nginx,來發布C/C++編寫的fastCGI程序,詳細細節如下。 1.介紹 Nginx - 高性能w

BZOJ3167/4824[Heoi2013]Sao/[Cqoi2017]老C的鍵盤

完全二叉樹 div 行為 orm sao tran input line ems 【BZOJ3167】[Heoi2013]Sao Description WelcometoSAO(StrangeandAbnormalOnline)。這是一個VRMMORPG,含有n個

README.mdMarkdown語言常用語法

ext 喜歡 tex lan IV TP text target font 轉自:http://blog.csdn.net/zhaokaiqiang1992 這裏只介紹最常用和最常見的功能,若想查看全部的語法,請移步http://wowubuntu.com/mar

HNOI 2004 L語言

memset strlen spa optimize its can ref max names 【題目鏈接】 https://www.lydsy.com/JudgeOnline/problem.php?id=1212 【算法】

SQL語言SQL語言基礎01

product sql 空字符串 執行 檢驗 所有 重新 大小 fse 1、了解sql 1.1數據庫基礎 1.1.1數據庫(database)   :保存有組織的數據的容器(通常是一個文件或一組文件)(也可理解為某種有組織的方式存儲的集合)   註:數據庫軟件稱為DB