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技术站