C/C++中extern函数使用详解

yizhihongxing

C/C++中extern函数使用详解

在C/C++程序中,一个函数可以被多个源文件共用,但是为了让编译器正常编译,需要对函数声明进行处理。关键字extern就是为此而生。

关键字extern

extern关键字可以用来声明一个函数或者变量,它的含义是指这个函数或者变量是在另外一个文件中定义的。

当一个变量或者函数在文件A中被定义,在文件B中被引用时,如果不使用extern关键字进行声明,编译器会认为这是一个新的变量或函数,而不是引用文件A中的变量或函数,导致编译错误。

声明方式

// 函数声明
extern int func();

// 变量声明
extern int num;

在进行函数或者变量声明时,可以不输入具体的函数或者变量实现代码,而只是描述它们的存在。这些被声明的函数或者变量需要在其他文件中被定义,才能使程序正常编译运行。

引用方式

当需要在文件B中使用文件A中的变量或函数时,只需要使用extern关键字进行声明即可。例如:

// a.cpp
int num = 10;

// b.cpp
extern int num;

int main() {
    printf("num in a.cpp is %d\n", num);  // 输出结果为 10
    return 0;
}

在这个例子中,由于文件a.cpp中定义了变量num,在文件b.cpp中使用时需要进行声明。使用extern进行声明之后,就可以在b.cpp中正常使用a.cpp中的变量了。

需要注意的是,如果在头文件中定义了全局变量或函数,需要在其他源文件中再次声明,否则会出现重定义错误。

示例1:实现共享库

我们可以使用extern关键字来实现共享库的功能。例如,我们定义一个print_hello的函数:

// print.c文件
#include <stdio.h>

void print_hello() {
    printf("Hello, World!\n");
}

这个函数在print.c文件中被定义,现在我们想要在其他文件中使用它。我们可以使用extern关键字来声明这个函数,然后可以在其他文件中进行调用:

// main.c文件
#include <stdio.h>

extern void print_hello();

int main() {
    print_hello(); // 通过 extern 声明的函数,在main.c中调用
    return 0;
}

我们可以将print.c编译为静态库或者动态库,然后在编译main.c时进行链接,从而实现调用。

示例2:实现跨文件变量修改

我们可以使用extern关键字来实现跨文件变量修改。例如我们定义一个全局变量:

// var.c文件
int num = 10;

这个全局变量在var.c文件中被定义,现在我们想要在其他文件中修改num的值。我们需要使用extern进行声明,然后在其他文件中进行修改:

// main.c文件
#include <stdio.h>

extern int num; // 声明变量 num

int main() {
    printf("num is %d\n", num); // 输出 num 的当前值
    num = 20; // 通过声明的方式修改变量 num 的值
    printf("num is now %d\n", num); // 输出修改后的 num 的值
    return 0;
}

通过extern关键字声明文件A中定义的变量,我们可以在文件B中对这个变量进行修改,从而实现了跨文件变量修改的功能。

结论

extern是C/C++语言中非常重要的关键字之一,它可以帮助我们实现跨文件的函数调用和变量修改。如果在程序中需要使用跨文件函数或者变量,就一定要使用extern进行声明。同时,使用extern声明的变量和函数也要在其他文件中对它们进行定义,否则会产生编译错误。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C/C++中extern函数使用详解 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++连接并使用MySQL数据库

    一、C++连接MySQL数据库简介C++是一门非常流行的编程语言,除了可以进行基本的编程外,它还可以连接多种数据库进行数据操作,其中之一就是MySQL数据库。在本篇文章中,我们将讲解如何使用C++连接并操作MySQL数据库,并提供用C++语言的示例代码。 二、安装MySQL C++ Connector在使用C++连接MySQL数据库之前,需要先安装MySQL…

    C 2023年5月22日
    00
  • C 语言编写一个计算器界面(可视化界面和多功能)

    下面是详细讲解“C 语言编写一个计算器界面(可视化界面和多功能)”的完整攻略。这里我们将使用C语言以及图形库GraphWin来实现一个可视化界面的计算器程序,并实现基本的加减乘除运算以及数字输入等多种功能。 确认环境 首先要确定你已经正确安装了 C 语言编译器和图形库GraphWin(也叫作 WinBGIm),如果你还没有则需要先安装。在 Windows 操…

    C 2023年5月23日
    00
  • jQuery自带的一些常用方法总结

    jQuery是什么?jQuery是一款流行的JavaScript库,具有优秀的跨浏览器兼容性和出色的HTML文档操作、事件处理、动画效果、AJAX以及插件扩展等功能。 jQuery自带的一些常用方法总结: HTML文档操作 .html(): 获取或设置匹配元素集合中的HTML内容。 用法示例: “` // 获取元素的HTML内容 var htmlConte…

    C 2023年5月23日
    00
  • win7系统中C:\documents and settings文件夹解锁访问图文教程

    “win7系统中C:\documents and settings文件夹解锁访问图文教程” 在Windows 7系统中,用户访问C:\Documents and Settings文件夹时可能会遇到无法访问的情况。这是由于Windows 7系统中,这个文件夹实际上是一个链接,指向了C:\Users文件夹。为了解决这个问题,需要解锁访问C:\Documents …

    C 2023年5月23日
    00
  • C语言实现图形化打砖块游戏

    下面是详细讲解“C语言实现图形化打砖块游戏”的完整攻略。 1. 准备工作 在开始编写代码之前,需要先安装一些必要的工具和库,包括:- Code::Blocks软件(用来编写C语言程序、调试和编译)- Simple DirectMedia Layer(SDL)库(用来处理图形图像、事件和音效等)- SDL_image库(用来加载和处理各种图像格式)- SDL_…

    C 2023年5月23日
    00
  • 1分钟了解C语言正确使用字节对齐及#pragma pack的方法

    ​  C/C++编译器的缺省字节对齐方式为自然对界。即在缺省情况下,编译器为每一个变量或是数据单元按其自然对界条件分配空间。   在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储(成员之间可能有插入的空字节),第一个成员的地址和整个结构的地址相同。   编译器缺省的结构成员自然对界条…

    C 2023年5月5日
    00
  • C++中四种加密算法之DES源代码

    下面是详细讲解C++中四种加密算法之DES源代码的完整攻略。 什么是DES算法 DES算法全称为数据加密标准(Data Encryption Standard),是一种使用密钥加密的对称加密算法。该算法是目前应用最广泛的加密算法之一,被广泛应用于各种安全领域。 DES算法的源代码 以下是C++实现的DES算法源代码: #include <iostrea…

    C 2023年5月23日
    00
  • c语言如何实现两数之和

    关于“c语言如何实现两数之和”的问题,以下是一份完整攻略: 1. 首先,定义两个整型变量,分别存储两个数 在C语言中,我们可以使用int类型定义一个整型变量。因此,我们可以通过以下代码定义两个整型变量: int a, b; 其中,a和b分别用来存储两个数。 2. 输入两个数的值 接下来,我们需要从用户那里获取这两个数的具体值。在C语言中,我们可以使用scan…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部