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

c/c++语言中extern的用法(VS编译)

c/c++语言中extern的用法

  • 前言:
      • 1. 声明外部变量
      • 2. 声明外部函数
      • 3. 在头文件中使用
      • 注意事项
  • 效果展示:

前言:

extern 关键字不仅在 C 语言中使用,在 C++ 语言中也同样适用。它主要用于声明一个变量或者函数是在别的文件或翻译单元中定义的,从而告诉编译器在遇到该变量或函数时,不要报错说找不到定义,而是去其他翻译单元中寻找。

以下是一些 extern 关键字的使用场景:

1. 声明外部变量

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

file1.c

int globalVar = 10;

file2.c

extern int globalVar;

void function() {
    printf("%d\n", globalVar);  // 可以访问file1.c中定义的globalVar
}

2. 声明外部函数

类似地,当你希望在一个文件中调用另一个文件中定义的函数时,可以使用 extern 声明这个函数(尽管对于函数来说,通常不需要显式使用 extern,因为函数默认就是外部的,除非声明为 static)。

file1.c

void myFunction() {
    printf("Hello from myFunction!\n");
}

file2.c

extern void myFunction();

void anotherFunction() {
    myFunction();  // 调用file1.c中定义的myFunction
}

3. 在头文件中使用

通常,我们会在头文件中声明外部变量和函数,然后在多个源文件中包含这个头文件。头文件中通常会使用 extern 关键字来声明这些外部符号。

myHeader.h

extern int globalVar;
extern void myFunction();

file1.c

#include "myHeader.h"

int globalVar = 10;
void myFunction() {
    printf("Hello from myFunction!\n");
}

file2.c

#include "myHeader.h"

void anotherFunction() {
    printf("%d\n", globalVar);
    myFunction();
}

注意事项

  • extern 关键字只是声明,不分配内存。实际的内存分配发生在定义的地方。
  • 如果在多个文件中声明并定义一个全局变量(即使使用了 extern),链接器会报错,因为它不知道应该使用哪个定义。
  • 对于函数,即使不使用 extern 关键字,编译器也会默认认为函数是外部的(除非用 static 关键字声明)。

总结来说,extern 关键字在 C 和 C++ 中都非常重要,用于跨文件或翻译单元访问变量和函数。

效果展示:


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

相关文章:

  • 将大型语言模型(如GPT-4)微调用于文本续写任务
  • ORA-01092 ORA-14695 ORA-38301
  • Android OpenGL ES详解——纹理:纹理过滤GL_NEAREST和GL_LINEAR的区别
  • 从0开始深度学习(28)——序列模型
  • sql server启用远程连接与修改默认端口
  • 如何线程安全的使用HashMap
  • 代码结构之结构体
  • 算法面经手撕系列(2)--手撕BatchNormlization
  • 【每日一诗】【诗词创作】【诗】《雨前秋夜》
  • 浅谈Linux中的环回设备
  • C++将32位深图片处理成灰度图
  • 构建自己的文生图工具:Python + Stable Diffusion + CUDA
  • 基于PHP+MySQL组合开发的在线客服源码系统 聊天记录实时保存 带完整的安装代码包以及搭建部署教程
  • JAVA-集合相关
  • 功能测试干了三年,快要废了。。。
  • 工号不够用了怎么办? - 华为OD统一考试(E卷)
  • 【代码随想录训练营第42期 续Day58打卡 - 图论Part8 - Dijkstra算法
  • 在 Linux 系统中目录架构说明
  • c语言--力扣简单题目(最后一个单词的长度)讲解
  • 【毕设】基于Java的超市管理系统
  • SQL:DATEDIFF函数
  • Java网络编程:构建高性能的TCP/IP服务
  • OpenAI草莓正式发布,命名o1
  • SEW变频器的组成
  • 十一,Spring Boot 当中配置拦截器的“两”种方式
  • 函数调用与作用域