外部文件调用结构体变量

//file: head.h

struct test

{ int i;

char j;

}; // 这里不能定义任何变量,因为头文件被许多文件包含,会出现重复定义

extern struct test *right; // 申明结构体变量 right 在其它文件中定义

/*******************************************************/



//file: use.c

struct test *right; // 在这里将 right 定义为全局变量



//file: other.c

#include "head.h" // 只要将头文件包含进去,任何文件都可以调用 right;



void over()

{ printf("%c",right->j); // 直接调用结构体变量 right 的成员





感谢大家的参与!

楼下有些朋友提到了这种观点:一个变量可以多次申明,不管是否在一个文件中,申明和定义可以同时出现。我做了错误的反驳,特此说明。





例子:

test.h:

typedef struct

{

int a;

char b[12];

} test;



extern test *t;

***********************************************************************

test.c:

#include ;

#include ;

#include "test.h"



test *t;

int main()

{

t = (test *)malloc(sizeof(test));

t->;a = 2;

strcpy(t->;b,"abc");

test_func();

free(t);

return 0;

}

************************************************************************

test_func.c:

#include ;

#include "test.h"



void test_func()

{

printf("t->;b = %s/n",t->;b);

}


在 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 变量的值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值