结构体定义如何extern
时间: 2023-07-26 15:44:12 浏览: 85
在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;
}
```
相关问题
c语言extern 结构体
在 C 语言中,extern 关键字用于声明一个变量或函数是在其他文件中定义的,而不是当前文件中定义的。在结构体中使用 extern 关键字时,需要注意以下几点:
1. 结构体本身不能用 extern 关键字来声明,只能用 typedef 或 struct 关键字来定义结构体类型。
2. 如果在定义结构体类型时使用了 extern 关键字,那么该结构体类型的定义必须在其它文件中进行,而不是在当前文件中。
3. 如果在结构体类型定义中包含了结构体成员变量,并且这些成员变量的类型是其他文件中定义的结构体类型,那么需要使用 extern 关键字来声明这些成员变量的类型。
下面是一个例子:
在文件 A 中定义了一个结构体类型,并使用 extern 关键字声明了其中一个成员变量的类型:
```c
// File A
struct student {
char name[20];
int age;
extern struct score; // 声明 score 的类型是在其他文件中定义的
};
typedef struct student STU;
```
在文件 B 中定义了另一个结构体类型,并定义了 score 变量:
```c
// File B
struct score {
int math;
int english;
};
struct score s = {80, 90};
```
在文件 C 中使用了结构体类型 STU,并定义了一个变量 stu:
```c
// File C
#include <stdio.h>
#include "A.h" // 包含结构体类型的定义
int main() {
STU stu = {"Tom", 18, s}; // 使用定义在文件 B 中的 score 变量
printf("Name: %s, Age: %d, Math: %d, English: %d\n", stu.name, stu.age, stu.score.math, stu.score.english);
return 0;
}
```
在上面的例子中,通过使用 extern 关键字声明了 score 变量的类型,使得在结构体类型 STU 中可以直接使用 score 变量。最后在文件 C 中使用了 STU 结构体类型和 score 变量,输出了 stu 变量的值。
extern 结构体数组
extern 结构体数组是指在一个源文件中声明一个结构体数组,但不进行定义和初始化,而是在其他源文件中进行定义和初始化。这样可以使得多个源文件共享使用同一个结构体数组。
在声明时,可以使用 extern 关键字来告知编译器该结构体数组的定义和初始化在其他源文件中进行。例如:
```c
// file1.c
struct MyStruct {
int num;
char name[20];
};
extern struct MyStruct myArray[10];
// file2.c
#include "file1.c"
struct MyStruct myArray[10] = {
{1, "John"},
{2, "Alice"},
// ...
};
```
在这个例子中,file1.c 中声明了一个 extern 结构体数组 myArray,但没有进行定义和初始化。在 file2.c 中通过包含 file1.c,并进行定义和初始化来完成对该结构体数组的实际定义。
这样,其他源文件也可以通过包含 file1.c 来访问和使用这个结构体数组。