c++ 里函数实现前extern \c"
时间: 2023-09-08 17:02:59 浏览: 59
在C语言中,函数的声明和定义通常需要使用关键字"extern"来进行前置声明。"extern"关键字的作用是告诉编译器该函数是一个外部函数,函数的定义在其他地方,编译器在编译时会去查找函数的定义。
一般情况下,在一个C源文件中定义的函数只能由该源文件中的其他函数调用,其他源文件无法直接调用该函数。如果我们想在其他源文件中调用该函数,就需要在其他源文件中通过"extern"关键字进行前置声明。
举个例子,假设我们在文件A.c中定义了一个函数foo:
```c
void foo() {
// 函数的实现代码
}
```
如果我们想在文件B.c中调用foo函数,我们需要在B.c中进行前置声明:
```c
extern void foo();
```
这样编译器在编译B.c时就知道foo函数的存在并且对其进行调用。
总结起来,"extern"关键字的作用是告诉编译器某个变量或函数是在其他文件中声明或定义的,需要在当前文件中进行前置声明。这样可以使得不同的源文件之间能够互相调用函数或使用变量。
相关问题
C++中如何通过extern函数
在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 ]
相关推荐
![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)