C源文件里面的函数声明用static和extern的区别是什么
时间: 2024-03-12 07:48:11 浏览: 57
在C源文件中,函数声明中的`static`和`extern`关键字也都是用来描述函数的存储类别的。
`static`存储类别的函数声明表示该函数仅在当前源文件中可见,即该函数只能在当前源文件中被调用,无法被其他源文件调用。这种函数通常用于实现库中的私有函数或者内部工具函数。例如:
```
static int add(int x, int y) {
return x + y;
}
```
`extern`存储类别的函数声明表示该函数在其他源文件中定义,当前源文件只是引用该函数,而不是定义该函数。这种函数通常用于声明库或者模块中的公共函数,以便其他源文件可以使用该函数。例如:
```
extern int printf(const char *format, ...);
```
总的来说,`static`和`extern`关键字用来描述函数的可见性和链接性,对于源文件中的函数声明来说,它们的作用是告诉编译器如何处理函数的存储和链接。但需要注意的是,源文件中的函数声明如果没有指定存储类别,则默认为`extern`。
相关问题
static和extern的区别
static和extern是C语言中用于声明和定义变量或函数的关键字。
1. static关键字:
- 在全局作用域中,用于限制变量或函数的作用域为当前文件内。
- 在局部作用域中,用于延长变量的生命周期,并保持其值在函数调用之间的持久性。
- 静态变量在程序运行期间只初始化一次,并且在整个程序执行期间保持其值不变。
- 静态函数只能在声明它的文件中使用,不能被其他文件调用。
2. extern关键字:
- 用于声明一个全局变量或函数,在其他文件中定义的变量或函数。
- extern声明的变量或函数可以在其他文件中使用,但不进行内存分配。
- 通过外部链接,在不同的源文件中共享变量或函数的定义。
- 如果一个全局变量或函数没有使用extern关键字进行声明,默认为外部链接。
总结:
static关键字用于限制变量或函数的作用域和生命周期,使其仅在当前文件内可见。而extern关键字用于声明在其他文件中定义的全局变量或函数,实现不同源文件间的共享。
static 和extern的在C语言作用
static和extern是C语言中用来定义变量和函数的关键字。
static关键字用于定义静态变量和静态函数。静态变量在程序运行期间只被初始化一次,而且只能在定义它的源文件中访问,其他文件无法直接访问该变量。静态函数也只能在定义它的源文件中调用,其他文件无法直接调用该函数。静态变量和静态函数的作用域限制在其定义的源文件中,不会与其他文件中同名的变量或函数产生冲突。
extern关键字用于声明一个全局变量或函数,表示该变量或函数在其他文件中定义。使用extern声明的变量或函数可以在当前文件或其他文件中使用。extern关键字通常用于多个源文件共享同一个变量或函数的情况下,避免重复定义。
总结:
- static关键字用于定义静态变量和静态函数,作用域限制在定义的源文件中。
- 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_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)