C++中如何通过extern函数
时间: 2024-04-30 18:18:22 浏览: 17
在C++中,使用`extern`关键字可以声明一个变量或函数是在另一个文件中定义的,从而可以在当前文件中使用它们。如果一个函数是在其他文件中定义的,我们就需要使用`extern`关键字来声明这个函数,然后就可以在当前文件中调用它。
例如,我们有一个名为`foo()`的函数,在另一个文件中定义,我们想在当前文件中调用它。我们可以在当前文件中声明这个函数:
```c++
// 在当前文件中声明 foo() 函数
extern void foo();
```
然后我们就可以在当前文件中调用`foo()`函数了:
```c++
// 调用在其他文件中定义的 foo() 函数
foo();
```
需要注意的是,`extern`关键字只是告诉编译器这个函数是在其他文件中定义的,而不是在当前文件中定义的。因此,在链接时,编译器会在其他文件中查找这个函数的定义。如果找不到定义,链接就会失败。
相关问题
c++extern声明外部函数
在C++中,使用extern声明可以在一个文件中调用其他文件中定义的函数,或者说将该函数的作用域扩展到本文件。extern声明的形式是在函数原型基础上加上关键字extern。在程序中经常需要调用其他文件中的外部函数,为了方便编程,C++允许在声明函数时省略extern关键字。例如,在主文件中可以使用extern声明来调用其他文件中定义的函数。\[1\]
举个例子,假设有一个test.cpp文件中定义了一个函数,我们可以在主文件中使用extern声明来调用这个函数。首先,在test.h文件中声明外部函数,然后在test.cpp文件中定义外部函数并进行初始化。最后,在主文件中使用extern关键字来调用外部函数。\[2\]
另外,C++中还有内部函数,也称为静态函数。使用内部函数可以使函数只局限于所在文件,如果在不同的文件中有同名的内部函数,它们互不干扰。通常将只能由同一文件使用的函数和外部变量放在一个文件中,并在它们前面加上static关键字使之局部化,其他文件不能引用这些函数和变量。\[3\]
#### 引用[.reference_title]
- *1* *3* [简单讲解C++的内部和外部函数以及宏的定义](https://blog.csdn.net/weixin_39663258/article/details/117269869)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [C++声明extern变量和extern函数的用法](https://blog.csdn.net/wenchm/article/details/130765956)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
解释一下c++中的extern
在C++中,`extern`是一个关键字,可以用来声明一个变量或函数是在其他文件中定义的。它的作用是告诉编译器在本文件中并没有定义该变量或函数,需要在其他文件中查找它的定义。具体来说,`extern`可以有以下两种用法:
1. 声明一个全局变量或函数
```c++
// 在某个头文件中声明全局变量
extern int global_var;
// 在某个头文件中声明函数
extern void func();
```
这样在其他文件中包含该头文件后,就可以使用`global_var`和`func`了。
2. 引用其他文件中的全局变量或函数
```c++
// 在某个头文件中声明全局变量
extern int global_var;
// 在某个源文件中使用该变量
int main() {
// 引用其他文件中定义的全局变量
extern int global_var;
cout << global_var << endl;
return 0;
}
```
这样,在编译时,编译器会在其他文件中查找`global_var`的定义,链接时将其与当前文件中的引用链接起来。
需要注意的是,`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)