【C語言】extern 關鍵字

在這里插入圖片描述

在C語言中,extern關鍵字用于聲明一個變量或函數是定義在另一個文件中的。它使得在多個文件之間共享變量或函數成為可能。extern關鍵字常見于大型項目中,通常用于聲明全局變量或函數,這些變量或函數的定義位于其他文件中。

基本用法

  1. 變量聲明
// file1.c
int shared_variable = 10; // 定義變量// file2.c
extern int shared_variable; // 聲明變量int main() {printf("%d\n", shared_variable); // 使用變量return 0;
}

在這個例子中,shared_variablefile1.c中定義,并在file2.c中使用extern進行聲明,從而可以在file2.c中訪問shared_variable

  1. 函數聲明
// file1.c
void shared_function() {printf("This is a shared function.\n");
}// file2.c
extern void shared_function(); // 聲明函數int main() {shared_function(); // 調用函數return 0;
}

在這個例子中,shared_functionfile1.c中定義,并在file2.c中使用extern進行聲明,從而可以在file2.c中調用shared_function

多文件編程

使用extern關鍵字時,通常會將變量和函數的聲明放在頭文件(.h文件)中,然后在需要使用這些變量或函數的源文件(.c文件)中包含相應的頭文件。

頭文件:shared.h

#ifndef SHARED_H
#define SHARED_Hextern int shared_variable;
extern void shared_function();#endif // SHARED_H

源文件:file1.c

#include "shared.h"int shared_variable = 10;void shared_function() {printf("This is a shared function.\n");
}

源文件:file2.c

#include <stdio.h>
#include "shared.h"int main() {printf("Shared variable: %d\n", shared_variable);shared_function();return 0;
}

在這個示例中,shared.h頭文件包含變量和函數的聲明。file1.c中定義了這些變量和函數,而file2.c通過包含shared.h頭文件來訪問和使用它們。

注意事項

  • 多次定義問題:雖然extern關鍵字允許在多個文件中聲明同一個變量或函數,但它們只能在一個文件中定義。如果在多個文件中定義同一個變量或函數,會導致鏈接錯誤。

  • 鏈接階段處理extern關鍵字的工作機制在于鏈接階段,而不是編譯階段。編譯器在編譯每個源文件時不會檢查extern變量或函數是否已經定義,而是由鏈接器在鏈接階段進行檢查。

  • 作用域與存儲類extern關鍵字通常用于全局變量和函數,而不用于局部變量。它的作用域是整個程序,而不僅限于某個文件或函數。

通過使用extern關鍵字,可以將程序的不同部分分散到多個源文件中,使代碼結構更加清晰、模塊化,有助于代碼的維護和重用。

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

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

相關文章

Python基礎入門知識

目錄 引言 簡要介紹Python語言 為什么要學習Python Python的應用領域 Python安裝和環境配置 Python的下載和安裝(Windows, macOS, Linux) 配置Python環境變量 安裝和使用IDE(如PyCharm, VS Code) Python基本語法 注釋 變量和數據類型(數字,字符串,列表,元組,字典,…

P3374 【模板】樹狀數組 1

題目描述 如題&#xff0c;已知一個數列&#xff0c;你需要進行下面兩種操作&#xff1a; 將某一個數加上 &#x1d465;x 求出某區間每一個數的和 輸入格式 第一行包含兩個正整數 &#x1d45b;,&#x1d45a;n,m&#xff0c;分別表示該數列數字的個數和操作的總個數。 …

<sa8650>sa8650 qcxserver-之-攝像頭傳感器VB56G4A驅動開發<1>

<sa8650>sa8650 qcxserver-之-攝像頭傳感器VB56G4A驅動開發 <1> 一、前言二、QCX架構三、QCX 傳感器驅動程序定制開發3.1 sensor硬件接口3.2 sensor配置文件3.2.1 cameraconfig.c3.2.2 cameraconfigsa8650_water.c3.2.3 新增編譯MK3.2.4 參數解析3.2.4.1 struct Camera…

干式電抗器的工作原理是什么

干式電抗器是電力系統中常用的無功補償設備&#xff0c;主要用于調節電網的電壓、提高功率因數、限制短路電流等。它的工作原理主要是通過在電路中引入一個與負載電流相反的磁場&#xff0c;從而產生一個與負載電流相抵消的電抗力&#xff0c;達到調節電壓和功率因數的目的。 干…

常微分方程算法之編程示例十-兩點狄利克雷邊值問題(理查德森外推法)

目錄 一、研究問題 二、C++代碼 三、計算結果 一、研究問題 本節我們采用理查德森法對示例八中的兩點狄利克雷邊值問題進行外推求解,相應的原理及推導思路請參考: 常微分方程算法之高精度算法(Richardson法+緊差分法)_richardson外推法-CSDN博客https://blog.csdn.net/…

20_系統測試與維護

目錄 測試基礎知識 測試原則 動態測試 靜態測試 測試策略 測試階段 測試用例設計 黑盒測試用例設計 白盒測試用例設計 McCabe度量法 魯棒性測試 缺陷探測率(Defect Detection Percentage,DDP) 調試 系統維護基礎 系統轉換 系統維護指標 軟件容錯技術 嵌入式安…

Stream流學習mapping

Stream流學習mapping 一、前言1. 基本用法2. 結合 Collectors.mapping3. 自定義轉換函數4.總結 一、前言 在Java的Stream API中&#xff0c;mapping 是一個非常有用的中間操作&#xff0c;它可以將流中的元素映射成其他形式。通常與 Collectors.groupingBy 或者 Collectors.ma…

【AI 大模型訓練數據白皮書 2024】

文末有福利&#xff01; 自《中共中央國務院關于構建數據基礎制度更好發揮數據要素作用的意見》發布以來&#xff0c;我國數據要素建設不斷深入&#xff0c;在國家數據局等 17 部門聯合印發的《“數據要素 ” 三年行動計劃&#xff08;2024 - 2026 年&#xff09;》進一步明確…

z-index的工作原理

z-index的工作原理 HTML文檔中的元素卻是存在于三個維度之中。除了大家熟知的平面畫布中的x軸和y軸&#xff0c;還有控制第三維度的z軸。 像 margin , float , offset 這些屬性&#xff0c;控制著元素在x軸和y軸上的表現形式一樣。 z-index 這個屬性控制著元素在z軸上的表現形…

不使用AMap.DistrictSearch,通過poi數據繪制省市縣區塊

個人申請高德地圖key時無法使用AMap.DistrictSearch&#xff0c;可以通過poi數據繪制省市縣區塊 1.進入POI數據網站找到需要的省市縣&#xff0c;下載對應的GeoJson文件 &#xff0c;此處為poi數據網站鏈接 2.? 處理geoJson數據&#xff0c;可以直接新建json文件&#xff0c;…

FIPS PUB 196 ENTITY AUTHENTICATION USING PUBLIC KEY CRYPTOGRAPHY

部分原文 3.3 Mutual authentication protocol The following mutual entity authentication protocol is based on Section 522. “Three pass authentication”, ofISO/IEC 9798-3. Certain authentication token fields and protocol steps are specified in greater deta…

在Windows命令行中設置定時關機

在Windows命令行中設置定時關機&#xff0c;你可以使用shutdown命令。下面是幾個實用的例子&#xff1a; 立即關機: shutdown /s /t 0延遲關機: 假設你想在30分鐘后關機&#xff0c;可以使用&#xff08;30分鐘等于1800秒&#xff09;:shutdown /s /t 1800定時關機: 如果你想在…

【機器學習】在【Pycharm】中的實踐教程:使用【邏輯回歸模型】進行【乳腺癌檢測】

目錄 案例背景 具體問題 1. 環境準備 小李的理解 知識點 2. 數據準備 2.1 導入必要的庫和數據集 小李的理解 知識點 2.2 數據集基本信息 小李的理解 知識點 注意事項 3. 數據預處理 3.1 劃分訓練集和測試集 小李的理解 知識點 注意事項 3.2 數據標準化 小李…

controller不同的后端路徑對應vue前端傳遞數據發送請求的方式,vue請求參數 param 與data 如何對應后端參數

目錄 案例一&#xff1a; 為什么使用post發送請求&#xff0c;參數依舊會被拼接帶url上呢&#xff1f;這應該就是param 與data傳參的區別。即param傳參數參數會被拼接到url后&#xff0c;data會以請求體傳遞 補充&#xff1a;后端controller 參數上如果沒寫任何注解&#xff0c…

第二高的薪水

第二高的薪水&#xff1a; 描述 查詢并返回 Employee 表中第二高的薪水 。如果不存在第二高的薪水&#xff0c;查詢應該返回 null(Pandas 則返回 None) pandas import pandas as pddef second_highest_salary(employee: pd.DataFrame):# 1. 刪除所有重復的薪水.employee emp…

第一后裔進不去游戲怎么辦 第一后裔免費加速器推薦

Steam年度最熱心愿榜單第五的游戲終于上線了&#xff0c;包好玩的新游&#xff0c;第一后裔&#xff0c;為什么說他肯定好玩呢&#xff1f;因為游戲第一次測試在兩年前就開始了&#xff0c;中間也斷斷續續測試了好多次&#xff0c;很多小伙伴都是體驗過游戲的&#xff0c;經過多…

MySQL 9.0正式版本來了!

MySQL 9.0 第一個正式版本于 2024 年 7 月 1 日發布&#xff0c;這是一個創新版&#xff0c;意味著它會增加一些新功能、修復一些問題并棄用一些舊功能。 性能相關 MySQL 9.0 支持將 EXPLAIN ANALYZE 命令輸出的 JSON 數據存儲到用戶定義的變量中&#xff0c;語法如下&#x…

【硬件模塊】PN532 NFC讀卡串口通信

PN532 PN532是一款功能豐富的非接觸式通訊收發模塊&#xff0c;其基于8051單片機核心&#xff0c;集成了多種通信接口和工作模式&#xff0c;以滿足不同應用場景的需求。以下是PN532功能相關的詳細介紹&#xff1a; 多種通信接口&#xff1a;PN532支持I2C、SPI和UART&#xff0…

MySQL的安裝和環境配置

1.下載MySQL安裝MySQL 選Custom選項為高級自定義模式 2.配置MySQL環境 安裝好之后&#xff0c;在桌面右鍵點擊我的電腦(有些是此電腦)&#xff0c;然后點擊屬性&#xff0c;進入系統信息設置&#xff0c;接著點擊高級&#xff0c;進入環境變量界面&#xff0c;進入環境變量界面…

【Spring Boot】Java 持久層 API:JPA

Java 持久層 API&#xff1a;JPA 1.Spring Data1.1 主要模塊1.2 社區模塊 2.JPA3.使用 JPA3.1 添加 JPA 和 MySQL 數據庫的依賴3.2 配置數據庫連接信息 4.了解 JPA 注解和屬性4.1 常用注解4.2 映射關系的注解4.3 映射關系的屬性 5.用 JPA 構建實體數據表 1.Spring Data Spring…