结构体如何声明为extern
时间: 2023-12-10 20:41:09 浏览: 554
结构体可以声明为 extern,以便在一个源文件中定义,在另一个源文件中使用。要声明结构体为 extern,请按以下步骤进行操作:
1. 在定义结构体的源文件中,使用 extern 关键字声明结构体。
```c
// file1.c
extern struct ExampleStruct {
int x;
char y;
} exampleStruct;
```
2. 在使用结构体的源文件中,包含结构体的头文件,并使用 extern 关键字声明结构体。
```c
// file2.c
#include "example.h"
extern struct ExampleStruct exampleStruct;
```
这样,就可以在 file2.c 中使用 exampleStruct 结构体了。注意,结构体的定义只能在一个源文件中进行,否则会引起重复定义错误。
相关问题
结构体声明extern
### C/C++ 中 `extern` 关键字与结构体
当涉及到跨文件使用结构体时,`extern` 关键字用于声明外部链接的全局变量或函数。对于结构体而言,在多个源文件之间共享结构体实例时,通常遵循如下模式:
#### 定义结构体
在头文件 `.h` 文件中定义结构体及其成员。例如,在 `ser.h` 文件中有如下定义[^1]:
```cpp
// ser.h
#ifndef SER_H_
#define SER_H_
struct str {
int id;
char name[50];
};
#endif // SER_H_
```
#### 声明外部结构体变量
在同一头文件或其他头文件中声明该结构体的一个具体实例为外部变量。注意这里不能省略结构体名,即使已经通过 `typedef` 给定了别名。
假设希望创建名为 `st_r` 的结构体实例并允许其他`.cpp` 或者 `.c` 文件访问它,则可以在某个实现文件(比如 `main.cpp`)里初始化这个对象,并且在需要使用的其它地方用 `extern` 来引用它[^3]:
```cpp
// main.cpp
#include "ser.h"
struct str st_r = {1, "example"};
int main() {
// ...
}
```
而在另一个文件如 `CmfcDlg.cpp` 中则可以通过下面的方式引用此结构体实例:
```cpp
// CmfcDlg.cpp
#include "ser.h"
extern struct str st_r;
void someFunction() {
printf("%d %s\n", st_r.id, st_r.name);
}
```
需要注意的是,虽然可以像处理基本数据类型那样仅写出 `extern variableName;` 形式的语句来尝试简化语法,但对于结构体来说这是不允许的——必须指明完整的类型说明符即 `extern struct StructType varibleName;` 才能正确工作。
另外,如果已经在头文件内提供了 `typedef` 别名给定结构体的话,那么也可以采用更简洁的形式来进行 `extern` 声明[^4]:
```cpp
// 如果 ser.h 已经包含了 typedef 如下所示
typedef struct _str{
int id;
char name[50];
} StrAlias;
// 那么可以在 .cpp 文件中这样写
extern StrAlias st_r;
```
总之,在不同的翻译单元间传递结构体实例时,应该始终确保先正确定义好这些结构体本身以及它们可能携带的数据成员,之后再合理运用 `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;
}
```
阅读全文
相关推荐
















