当前位置: 首页 > article >正文

C语言中,“extern”关键字的含义与用法

在这里插入图片描述
在C语言中,extern 关键字用于声明一个已经在其他地方定义的变量或函数。它的主要作用是告诉编译器,某个变量或函数是在当前文件之外定义的,编译器应该在链接阶段找到这个变量或函数的实际定义。以下是 extern 的一些常见用途和用法:

1. 声明全局变量

当你在一个文件中定义了一个全局变量,并希望在另一个文件中使用这个变量时,可以在第二个文件中使用 extern 关键字来声明这个变量。

文件1: file1.c
// 定义一个全局变量
int globalVar = 10;
文件2: file2.c
#include <stdio.h>

// 使用 extern 声明 file1.c 中定义的全局变量
extern int globalVar;

void printGlobalVar() {
    printf("globalVar = %d\n", globalVar);
}

2. 声明函数

如果你在一个文件中定义了一个函数,并希望在另一个文件中调用这个函数,可以在第二个文件中使用 extern 关键字来声明这个函数。不过,通常情况下,函数的声明已经包含在头文件中,所以直接包含头文件即可。

文件1: file1.c
// 定义一个函数
void myFunction() {
    // 函数实现
}
文件2: file2.c
#include <stdio.h>

// 使用 extern 声明 file1.c 中定义的函数
extern void myFunction();

int main() {
    myFunction();
    return 0;
}

3. 在头文件中声明

为了更好地组织代码,通常会在头文件中声明全局变量和函数,然后在多个源文件中包含这个头文件。

头文件: common.h
#ifndef COMMON_H
#define COMMON_H

// 声明全局变量
extern int globalVar;

// 声明函数
void myFunction();

#endif // COMMON_H
文件1: file1.c
#include "common.h"

// 定义全局变量
int globalVar = 10;

// 定义函数
void myFunction() {
    // 函数实现
}
文件2: file2.c
#include <stdio.h>
#include "common.h"

int main() {
    myFunction();
    printf("globalVar = %d\n", globalVar);
    return 0;
}

总结

  • extern 关键字用于声明已经在其他地方定义的变量或函数。
  • 对于全局变量,使用 extern 可以在多个文件之间共享同一个变量。
  • 对于函数,虽然通常不需要显式使用 extern,但在某些情况下(如静态链接库)可能需要使用 extern 来声明函数。

通过合理使用 extern,可以有效地管理和组织大型项目的代码。


http://www.kler.cn/a/389561.html

相关文章:

  • 算法——二分查找(leetcode704)
  • 【MySQL】数据库表连接简明解释
  • [CKS] 关闭API凭据自动挂载
  • 翼鸥教育:从OceanBase V3.1.4 到 V4.2.1,8套核心集群升级实践
  • 腾讯云nginx SSL证书配置
  • uniapp 设置安全区域
  • 网页版五子棋——用户模块(服务器开发)
  • 金山云C++面试题及参考答案
  • jenkins配置前端自动部署
  • MSB8041此项目需要 MFC 库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装-错误解决
  • 2024 年度分布式电力推进(DEP)系统发展探究
  • VBA08-if语句
  • 互动电影《催眠麦克风》官宣定档2.21预售正式开始
  • Kafka-linux环境部署
  • ssm077铁岭河医院医患管理系统+vue(论文+源码)_kaic
  • http协议与内外网的划分
  • uni-app资源管理与图标使用全解
  • Android 获取 SHA1 值的详细步骤
  • 【系统架构设计师】2024年下半年真题论文: 论面向服务的架构设计(包括解题思路和参考素材)
  • 【Linux探索学习】第十二弹——初识进程:进程的定义、描述和一些简单的相关操作
  • Spring Boot框架:构建符合工程认证的计算机课程
  • AIGC:人工智能生成内容的未来
  • 【C#】C# .NET中的Func、Predicate和Expression详解
  • 脉脉大数据面试题及参考答案(2万字长文)
  • Latex中给公式加边框
  • 「Qt Widget中文示例指南」如何创建一个窗口标志?(一)