extern和static的區別

c語言中的 static:

修飾局部變量:存放在靜態數據區,生命周期位整個程序結束,但作用于仍為函數局部。
修飾全局變量:無法被同一工程其他源文件訪問。
修飾函數:與全局變量類似。

extern:

可被同一工程其他源文件訪問

c++中static:

修飾類中函數:表示該函數屬于一個類,而不是此類的任何特定對象。
修飾類中變量:表示該變量為所有對象所有,在存儲空間中只有一個副本。

c++中extern

要調用其它文件中的函數和變量,只需把該文件用#include包含進來即可。extern可加速程序的編譯過程。
C++中調用C庫函數,就需要在C++程序中用extern “C”聲明要引用的函數。這是給鏈接器用的,告訴鏈接器在鏈接的時候用C函數規范來鏈接。主要原因是C++和C程序編譯完成后在目標代碼中命名規則不同,用此來解決名字匹配的問題

https://www.cnblogs.com/zhaodun/p/6432615.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383356.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383356.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383356.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RT5350原廠SDK及AP移植步驟詳解

最近想搞一下rt5350,所以找了個原廠的SDK包進行了編譯,很快路由器就可以用了,把我的編譯操作步驟寫了下分享給更多的愛好者,供大家參靠,下一步準備移植攝像頭玩玩。有興趣的可以一起交流。 RT5350移植Toolchain工具的安…

linux系統編程之進程概念(操作系統---管理,進程創建,進程狀態,進程優先級, 環境變量,程序地址空間,進程O(1)調度方法)

系統編程: 進程概念->進程控制->基礎IO->進程間通信->進程信號->多線程進程概念 馮諾依曼體系結構----現代計算機硬件體系結構 馮諾依曼體系結構----現代計算機硬件體系結構 計算機五大硬件單元:輸入設備:鍵盤輸出設備&#…

Make Menuconfig詳解 (配置內核選擇)

Make Menuconfig簡介 make menuconfig 圖形化的內核配置make mrproper -----刪除不必要的文件和目錄. #make config(基于文本的最為傳統的配置界面,不推薦使用) #make menuconfig(基于文本選單的配置界面,字符終端下…

Linux系統編程之進程控制(進程創建,fork函數,進程中止,進程等待,程序替換)

進程創建 fork()------復制,返回值,寫時復制 vfork()創建子進程—子進程與父進程共用同一塊虛擬地址空間, 為了防止調用棧混亂,因此阻塞父進程直到子進程調用exit()退出或者進行程序替換 vfork創建的子…

Linux內核配置系統淺析

隨著 Linux 操作系統的廣泛應用,特別是 Linux 在嵌入式領域的發展,越來越多的人開始投身到 Linux 內核級的開發中。面對日益龐大的 Linux 內核源代碼,開發者在完成自己的內核代碼后,都將面臨著同樣的問題,即如何將源代…

Linux系統編程下做一個簡易的shell

自主實現一個shell--------minshell shell:命令行解釋器-------解釋執行用戶的輸入(完成相對應的功能) 步驟 1. 獲取標準輸入中的字符串 2. 對字符串進行解析[ls -l -a][ls ] [-l ] [-a] 3. 創建子進程 4. 子進程中進行程序替換 5. 父進程…

C++起始(內聯函數,宏的優缺點,const關鍵字,auto關鍵字(C++11)基于范圍的for循環(C++11). 指針空值nullptr(C++11))

內聯函數 概念 以inline修飾的函數叫做內聯函數,編譯時C編譯器會在調用內聯函數的地方展開,沒有函數壓棧的開銷, 內聯函數提升程序運行的效率 函數前增加inline關鍵字將其改成內聯函數,在編譯期間編譯器會用函數體替換函數的調用…

linux內核中的匯編語言

在Linux內核代碼中,有一部分是用匯編語言編寫的。其大部分是關于中斷與異常處理的底層程序,還有就是與初始化有關的程序,以及一些核心代碼中調用的公用子程序。 用匯編語言編寫內核代碼中的部分代碼,大體上是出于如下幾個方面考慮…

數據結構課程設計---c語言實現通訊錄(動態擴容+文件存儲)

1 題目一 : 通訊錄 1.1問題描述 編寫一個通訊錄管理系統,以把所學數據結構知識應用到實際軟件開發中去。每條信息至包含 :姓名(NAME )街道(STREET)城市(CITY)郵編&#…

linux內核panic

1. Linux Kernel Panic的產生的原因 panic是英文中是驚慌的意思,Linux Kernel panic正如其名,linux kernel不知道如何走了,它會盡可能把它此時能獲取的全部信息都打印出來。 有兩種主要類型kernel panic,后面會對這兩類panic做詳細…

數據結構課程設計------c實現散列表(二次探測再哈希)電話簿(文件存儲)

題目二 :散列表的設計與實現 2.1問題描述 設計散列表實現電話號碼查找系統,使得平均查找長度不超過2基本要求 (1)設每個記錄有下列數據項:電話號碼、用戶名、地址; (2)從鍵盤輸入各…

科技論文----論搜索引擎現狀及發展趨勢

搜索引擎現狀及發展趨勢 【摘要】 隨著最近10年中國互聯網的快速發展菜互聯網已經徹底改變了人們的生活方式,而在互聯網的發展過程中。搜索引擎發揮了巨大的推動作用。本文對搜索引擎的發展歷史采用的技術,發展現狀出現的問題以及未來發展方向進行了綜述…

inittab文件格式

/etc/inittab文件是Linux系統第一個進程init的配置文件。其每個記錄占一行,每行最多512個字符。該文件的每個記錄的格式為: id:runlevel:action:process 其中,id是一個不超過4個字符的標識,用來唯一標識一條記錄。runlevel表明該條…

數據結構課程設計------掃雷游戲(升級版,可展開)

本程序由團隊中的一個人所寫,本人看懂并寫下此文章 題目:掃雷 3.1問題描述 掃雷游戲 [基本要求] (1)完成棋盤的初始化并在標準顯示器中顯示 (2)通過輸入行列值確定用戶輸入 (3)游…

C語言的編譯鏈接過程的介紹

發布時間: 2012-11-08 10:17 作者: 未知 來源: 51Testing軟件測試網采編 字體: 小 中 大 | 上一篇 下一篇 | 打印 | 我要投稿 | 推薦標簽: DotNet 軟件開發 | 感言十年 C語言的編譯鏈接過程要把我們編寫的一個c程序(源代碼&#x…

vs2013鏈接Mysql時出現 (由于找不到libmysql.dll,無法繼續執行代碼。重新安裝程序可能會解決此問題)

將MySQL安裝目錄下的lib文件夾中 的libmysql.dll文件拷貝到C:\Windows\System32目錄下即可

gcc 優化選項 -O1 -O2 -O3 -Os 優先級,-fomit-frame-pointer

少優化->多優化: O0 -->> O1 -->> O2 -->> O3 -O0表示沒有優化,-O1為缺省值,-O3優化級別最高 英文解析: -O -O1 Optimize. Optimizing compilation takes somewhat more time, an…

const 和 #define 區別總結

const有類型,可進行編譯器安全檢查,#define 無類型,不可進行類型檢查const 有作用域,而#define 不重視作用域,默認定義在指定作用域下有效的常量,那么#define 就不能用(可以用#undef結束宏定義生…

Eclipse : Unresolved inclusion

Eclipse 中新建C 或C 到項目時&#xff0c;頭文件報警&#xff0c;顯示“Unresolved inclusion:<stdio.h>” 雖然不影響項目到編譯和運行&#xff0c;確也無法查看頭文件&#xff0c;讓人感覺實在不爽。下面是在國外到網站上看到解決方案&#xff0c;自己整理了一下拿來分…

c++對const增強 和cosnt分配內存情況

const增強 c語言中const是偽常量&#xff0c;可以通過指針修改 c中const會放到符號表中 c語言中const默認是外部連接&#xff0c;c中const默認是內部鏈接 #include<iostream> using namespace std;const int m_a 10; //在全局區域里&#xff0c;受到保護&…