extern 造成的重定义
时间: 2023-07-26 18:48:21 浏览: 40
extern是一个关键字,用于在C或C++程序中声明一个变量或函数是在其他文件中定义的。如果在一个文件中使用extern声明了一个变量或函数,并且在另一个文件中也定义了该变量或函数,就会出现重定义错误。这是因为编译器无法确定使用哪个定义,因此会报错。为了解决这个问题,可以将变量或函数的定义放在一个单独的文件中,并在需要使用它的文件中使用extern关键字进行声明,这样编译器就能够正确地链接它们。另外,也可以使用头文件来包含变量或函数的声明,这样可以在多个文件中重复使用它们,而不会出现重定义错误。
相关问题
extern定义函数
extern关键字主要用于声明外部函数,即在某个文件中声明函数的原型,在另一个文件中定义该函数的具体实现。通过使用extern关键字,可以在一个文件中声明函数,在另一个文件中使用该函数,实现函数的模块化和代码的复用。
下面是extern定义函数的一般格式:
extern 返回类型 函数名(参数列表);
例如,如果在一个文件中声明了一个函数foo()为外部函数:
extern void foo(int a, int b);
那么在另一个文件中,可以使用该函数:
void bar() {
foo(1, 2);
}
通过extern关键字来声明函数,可以让编译器知道在其他文件中存在这个函数的定义,从而避免了函数未定义的错误。同时,也使得代码更加清晰和可维护,方便代码的组织和管理。
结构体定义如何extern
在C语言中,结构体定义可以使用`extern`关键字来声明,但是不能直接定义。这是因为`extern`关键字用于指示编译器该符号的定义在其他文件中,并且在当前文件中只需要引用它。
下面是一个示例:
在头文件`example.h`中定义一个结构体类型:
```
typedef struct {
int x;
int y;
} Point;
```
在另一个文件`example.c`中使用`extern`来引用该结构体类型:
```
#include "example.h"
extern Point p; // 声明一个结构体类型的变量p
void someFunction(void) {
p.x = 10;
p.y = 20;
}
```
在主程序文件中可以定义该结构体类型的变量并使用它:
```
#include "example.h"
Point p; // 定义一个结构体类型的变量p
int main(void) {
someFunction(); // 在函数中修改结构体类型的变量p的值
return 0;
}
```