在keil5中.h文件中什么时候需要使用extern
时间: 2024-09-25 20:13:35 浏览: 141
在Keil5的C语言编程中,`extern`关键字用于声明变量或者函数的外部作用域。当你希望在头文件(.h)中定义一个变量或者函数,但在对应的源文件(.c)中实际声明并初始化时,就需要使用`extern`。
1. **全局变量**:如果一个变量在整个程序中只有一份实例,你需要在`.h`文件中用`extern`声明,然后在每个源文件中只需声明(不加`extern`),并在某个地方初始化它。这样做可以避免多次定义带来的潜在问题。
```cpp
// header file (example.h)
extern int globalVar;
// source file (example.c)
int globalVar; // 只声明,不初始化
void someFunction() {
globalVar = 42; // 初始化在这里
}
```
2. **函数声明**:如果你在一个`.h`文件中定义了一个函数,但是它的实现放在另一个源文件中,也需要在`.h`中用`extern`声明函数以便其他文件能够知道它的存在。
```cpp
// example.h
extern void functionToImplement();
// example.c
void functionToImplement() {
// 实现...
}
```
相关问题
keil5怎么写.h文件
在Keil MDK(μVision)集成开发环境中,H头文件(Header File)通常用于声明函数、变量、结构体等,以便其他源文件能够引用它们,而不必了解其内部实现细节。以下是编写H文件的基本步骤:
1. **创建头文件**:
- 打开MDK工作空间,右键点击"Projects" -> "New" -> "Source File",选择".h"作为文件扩展名,输入自定义的名字(如example.h)。
2. **定义内容**:
使用`#ifndef`到`#endif`预处理指令防止多次包含(防止循环包含):
```c
#ifndef _EXAMPLE_H_
#define _EXAMPLE_H_
// 定义函数原型
void exampleFunction(int param);
// 定义结构体
struct ExampleStruct {
int value;
};
// 其他变量声明
extern const char *message;
#endif /* _EXAMPLE_H_ */
```
3. **包含头文件**:
在需要使用这些声明的源文件(如main.c)中,使用`#include`来引入头文件:
```c
#include "example.h"
int main() {
exampleFunction(42);
return 0;
}
```
51单片机用keil5编程时,为什么我在.c文件里定义一个函数时,还要在对应的.h文件里用extern定义一下函数才能使用
在C语言中,函数的声明和定义是分开的,函数的定义指的是函数的实现部分,而函数的声明指的是函数的原型,即函数的名称、返回类型、参数类型和参数个数等信息。在C语言中,如果一个函数在当前的.c文件中被定义,则该函数只能在该.c文件中被调用,其他的.c文件不能直接调用该函数,因为其他的.c文件并不知道该函数的存在。
为了使其他的.c文件也能够调用该函数,我们需要在该函数所在的.c文件中进行函数的声明,即在.c文件中使用extern关键字声明该函数。然后在其他的.c文件中,就可以通过#include指令包含该.c文件,并且可以使用该函数了。
而对于.h文件,它主要用于定义函数的接口和数据结构的声明,以便于在不同的.c文件中使用。因此,在.h文件中也需要进行函数的声明,以便于其他的.c文件能够使用该函数。通常情况下,我们可以把函数的声明放在.h文件中,然后在需要使用该函数的.c文件中通过#include指令包含该.h文件。这样,在编译的时候,编译器就会知道该函数的存在,从而正确地生成目标代码。
因此,对于你的问题,需要在.c文件中用extern关键字进行函数的声明,以便于其他的.c文件能够使用该函数,并且需要在对应的.h文件中进行函数的声明,以便于在不同的.c文件中使用该函数。
阅读全文