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

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日

相关文章

  • R语言的一个加法函数使用介绍

    当使用R语言进行数据分析和可视化时,经常需要编写一些自定义函数来增强数据操作的效率和可重复性。这里我为大家介绍一个R语言的加法函数,帮助大家了解如何自定义函数并灵活运用。 函数定义 首先定义一个简单的加法函数,用于计算两个数的和。 add <- function(x, y) { return(x + y) } 这里使用了R语言的函数声明语法,将函数名设…

    C 2023年5月22日
    00
  • C语言实现简易网络聊天室

    C语言实现简易网络聊天室攻略 1. 简介 在本文中,我们将介绍如何使用C语言实现一个简易的网络聊天室。最终的网络聊天室将包括客户端和服务器端两个部分。客户端可以通过与服务器相连进行多人聊天,服务器将转发客户端发送的消息到其它客户端。 2. 前期准备 在开始编写代码之前,我们需要进行如下准备工作: 2.1 编程环境 C语言是一门编译型语言,因此我们需要准备好C…

    C 2023年5月23日
    00
  • C/C++中可变参数的用法详细解析

    C/C++ 中可变参数的用法详细解析 在 C/C++ 中,我们可以利用可变参数来实现函数的灵活性和通用性。 在本文中,我们将深入了解可变参数的定义、使用、示例和最佳实践。 什么是可变参数? 可变参数是指函数参数的数量和类型是可变的。通常情况下,我们定义函数时需要指定固定数量和类型的参数,例如: int sum(int a, int b, int c) { r…

    C 2023年5月24日
    00
  • C++计算24点的简单程序

    下面我会详细讲解如何编写一个使用C++语言计算24点的简单程序,攻略分为以下几个步骤: 1. 程序说明 计算24点是一个纸牌游戏,游戏规则如下: 从一副牌中随机选择4张牌,可以是任意花色和面值; 利用加、减、乘、除等基本运算,以及括号等数学符号,计算出24。 例如,给定四张牌5、5、3、2,可以通过以下算式计算出24: (5 + 5) * 3 – 2 = 2…

    C 2023年5月22日
    00
  • 浅析Objective-C的程序结构及面向对象的编程方式

    浅析Objective-C的程序结构及面向对象的编程方式 本文主要介绍Objective-C的程序结构及面向对象的编程方式。 程序结构 Objective-C的程序结构如下: #import <Foundation/Foundation.h> int main () { NSAutoreleasePool * pool = [[NSAutorel…

    C 2023年5月22日
    00
  • python求解三角形第三边长实例

    接下来我将详细讲解“Python求解三角形第三边长实例”的完整攻略,包括以下内容: 题目描述 实现思路 代码实现 示例说明 1. 题目描述: 给出三角形两条边的长度,求第三条边的长度。 2. 实现思路: 假设已知三角形两边分别为a、b,其夹角为C。则可通过以下公式求解第三边长: c = math.sqrt(a ** 2 + b ** 2 – 2 * a * …

    C 2023年5月22日
    00
  • Android实现串口通信

    下面是详细讲解 “Android实现串口通信”的完整攻略: 0. 总述 在 Android 设备开发中,如何实现串口通信是一个非常重要的话题。本文将从硬件与软件两个方面,分别介绍串口通信的实现流程与方法。其中,硬件部分主要包括 USB 转串口模块的接线及参数设置等;软件部分主要包括串口通信协议选型,比如简单串口通信协议(Simple Serial Proto…

    C 2023年5月23日
    00
  • Java IO流之字符流的使用详解

    Java IO流之字符流的使用详解 什么是字符流 字符流是一种能够处理字符数据的流,在字符流中,数据以字符的形式进行读写。 字符流的分类 字符流可以分为两类:输入字符流和输出字符流。其中,输入字符流用于读取字符数据,输出字符流用于写入字符数据。 输入字符流 输出字符流 Reader 抽象类 Writer 抽象类 FileReader 文件字符输入流 File…

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