在评论中回答您的问题:(另请阅读此处以了解有关外部使用的精彩讨论。)
像这样声明结构,然后将其复制(或任何变量)允许它包含相同的值,并在所有使用它的文件中看到相同的值。
在.h
typedef struct {
int a;
char *b;
}A:
//A has just been created as a new type, i.e. struct A, so it now conforms to the same rules other variable conform to with regards to the use of extern. So...
extern A a, *pA;//create a global copy of A with extern modifier
然后在file1.c
A a, *pA; //copy of externed variable
int main(void)
{
pA = &a;//initialize pA here, use everywhere in file;
return 0;
}
然后在file2.c
A a, *pA;
[编辑] 我的原始答案没有改变,并且确实回答了 OP 提出的一个非常具体的问题:澄清我的评论:
做 typedef struct {...} A; 这样的事情不是那么容易吗?外部 A a, *pA; 在你的头文件中,然后是 A a, *pA; 在每个 .c 模块中您需要使用它们吗?我认为对于以后必须维护代码的人来说更具可读性
OP问:
@ryyker:您能澄清一下您发布的外部示例吗?这让我很困惑,因为结构在 c 中没有链接,但所有变量和函数都有。
上面的请求得到了回答。OP接受了答案。此编辑是为了回应@Jim Balter 关于我的答案有效性的激进投诉/声明。新代码已经过清理和测试,以说明使用 extern 修饰符创建和使用项目可见变量的用法。下面的代码示例将演示:
头文件.h
int somefunc(void);
typedef struct {
int num;
char *b;
}A;
//A has just been created as a new type, i.e. struct A, so it now
//conforms to the same rules other variable conform to with
//regards to the use of extern. So...
extern A a, *pA;//create a global copy of A with extern modifier
文件1.c
#include <ansi_c.h>
#include "header.h"
A a, *pA;
int main(void)
{
pA = &a;//initialize pA here, use everywhere in file;
pA->num = 45;
pA->b = malloc(strlen("value of pA->b")+1);
somefunc();
printf("value of pA->b is: %s\n", pA->b);
getchar();
free(pA->b);
return 0;
}
文件2.c
#include <ansi_c.h>
#include "header.h"
A a, *pA; //Note: optional presence of A in this file.
//It is not Not necessary to place this line,
//but for readability (future maintainers of code
//I always include it in each module in which it is used.
int somefunc(void)
{
printf("%d\n", pA->num);//value of pN->num same as in file1.c
strcpy(pA->b, "value of pA->b");
return 0;
}
构建和运行这些文件将展示A 结构创建的header.h 的项目
可见性
,并在 file1.c 和 file2.c 中使用(以及所需的尽可能多的 .c 文件)
它还证实了我在我的原始答案。