C头文件里面的函数声明用static和extern的区别是什么
时间: 2024-03-12 12:48:06 浏览: 30
在C头文件中,函数声明中的`static`和`extern`关键字都是用来描述函数的存储类别的。
`static`存储类别的函数声明表示该函数仅在当前文件中可见,即该函数只能在当前文件中被调用,无法被其他文件调用。这种函数通常用于实现库中的私有函数或者内部工具函数。例如:
```
static int add(int x, int y); // 声明了一个只在当前文件中可见的add函数
```
`extern`存储类别的函数声明表示该函数在其他文件中定义,当前文件只是引用该函数,而不是定义该函数。这种函数通常用于声明库或者模块中的公共函数。例如:
```
extern int printf(const char *format, ...); // 声明了一个在其他文件中定义的printf函数
```
总的来说,`static`和`extern`关键字用来描述函数的可见性和链接性,对于头文件中的函数声明来说,它们的作用是告诉编译器如何处理函数的存储和链接。
相关问题
C函数定义写在头文件中,需要加extern吗
在头文件中定义函数不是一个好的编程实践,因为这会导致多个源文件中包含该头文件时出现重复定义的问题。通常情况下,头文件只包含函数和变量的声明,而不是定义。函数的定义应该放在源文件中。
如果非要在头文件中定义函数,那么不需要加 `extern`。在头文件中定义函数时,需要使用 `inline` 关键字或者 `static` 关键字来避免重复定义的问题。如果使用 `inline` 关键字,在编译时会将函数的定义插入到函数调用的地方,而不是像普通函数一样在链接时进行定义。如果使用 `static` 关键字,函数的作用域仅限于当前文件,也可以避免重复定义的问题。
extern和static
extern和static是C++中的两个关键字,它们都可以用于函数和变量的声明和定义。
extern关键字用于声明一个在其他文件中定义的全局变量或函数,它告诉编译器该变量或函数的定义在别的文件中,需要在链接时进行连接。在头文件中使用extern声明函数或变量,可以在其他文件中使用该函数或变量。
static关键字有两种用法,一种是用于局部变量,表示该变量在程序运行期间只被初始化一次,不会被销毁,可以在函数调用之间保持其值。另一种用法是用于全局变量或函数,表示该变量或函数只在当前文件中可见,不能被其他文件访问。
举个例子,如果在一个头文件中声明了一个全局变量,可以在其他文件中使用extern关键字来引用该变量;如果在一个函数中定义了一个静态变量,该变量的值会在函数调用之间保持不变。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.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)