extern 修饰一个函数
时间: 2024-06-20 15:03:09 浏览: 7
extern是一个关键字,它用于修饰变量和函数。当extern修饰一个函数时,它告诉编译器该函数是在其他文件中定义的,这样编译器在编译当前文件时就不会生成该函数的代码。而是在链接时将该函数的地址替换为定义它的文件中的地址。这种方式可以使得多个文件共享同一个函数,减小代码的冗余。通常来说,我们可以将函数声明放在头文件中,并在需要使用该函数的文件中通过#include指令引入该头文件来使用外部函数。
举个例子,假设我们有两个源文件foo.c和bar.c,foo.c中定义了一个函数func1(),bar.c需要调用func1()。如果我们在bar.c中使用extern声明func1(),并在bar.c中引入foo.h头文件,则编译器会将func1()的调用地址保存下来,在链接时再将它与foo.c中定义的实际函数地址联系起来。
相关问题
extern修饰函数
extern修饰函数是用来说明函数的定义和声明的关系。在C语言中,可以在一个文件中声明一个函数而在另一个文件中定义它。这样的话,需要在函数的声明前加上extern关键字,告诉编译器该函数是在其他文件中定义的。
例如,在一个文件中声明一个全局函数如下:
extern void myFunction();
然后在另一个文件中定义该函数:
void myFunction() {
// 函数的实现
}
这样,在编译时,编译器就知道myFunction函数是在其他文件中定义的,并会在链接阶段将其正确地连接到调用它的文件中。如果没有extern关键字,编译器会在当前文件中查找函数的定义,找不到则报错。
需要注意的是,对于局部函数(函数内部定义的函数),不能使用extern修饰,因为它们只在当前文件中可见。
extern修饰全局变量C语言
extern是C语言中用来声明全局变量或函数的关键字。它的作用是告诉编译器该变量或函数是在其他文件中定义的,而不是当前文件中定义的。
当我们在一个文件中使用extern修饰全局变量时,它表示该变量在其他文件中已经定义了。这样,在编译时,编译器会在其他文件中查找该变量的定义,并将其链接到当前文件中。
使用extern修饰全局变量的语法如下:
extern 数据类型 变量名;
例如,我们在文件A.c中定义了一个全局变量num:
int num;
如果我们在文件B.c中想要使用这个全局变量,可以在B.c中使用extern关键字进行声明:
extern int num;
这样,编译器就知道num是在其他文件中定义的全局变量,并会将其链接到B.c中。
需要注意的是,extern关键字只是用来声明全局变量或函数,并不会为其分配内存空间。实际的内存分配是在定义该变量或函数的文件中进行的。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)