C头文件里面的函数声明用static和extern的区别是什么
时间: 2024-03-12 09:48:06 浏览: 68
在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` 关键字,函数的作用域仅限于当前文件,也可以避免重复定义的问题。
C++函数定义写在头文件中,需要加extern吗
不建议在头文件中定义函数,因为这样做会造成重复定义的问题。通常情况下,头文件中只包含函数和变量的声明,而不是定义。函数的定义应该放在源文件中,这样可以避免重复定义和链接错误。
如果非要在头文件中定义函数,那么不需要加 `extern`。在头文件中定义函数时,需要使用 `inline` 或者 `static` 关键字来避免重复定义的问题。如果使用 `inline` 关键字,在编译时会将函数的定义插入到函数调用的地方,而不是像普通函数一样在链接时进行定义。如果使用 `static` 关键字,函数的作用域仅限于当前文件,也可以避免重复定义的问题。
阅读全文