我有这些文件
测试1.h
extern int value;
void inc_value();
int print_value();
测试1.c
#include "test1.h"
int value=0;
void inc_value()
{
printf("inc value from test3.c = %dn", value++);
}
int print_value()
{
printf(" value in test1.c = %dn", value);
return value;
}
测试3.c
# include "test1.h"
main()
{
inc_value();
}
测试4.c
# include <stdio.h>
#include "test1.h"
main()
{
printf("value from test4 = %dn", print_value());
}
我正在更新test3.c中的变量"value",并试图从test4.c中读取它。但是test3.c无法更新在test1.h中声明并在test1.c 中定义的"value"
我错过了什么。。
这永远不会奏效。
您不能使用两个不同程序中的外部变量并神奇地期望它工作。只是。。。错误的每个程序都在自己的地址空间中运行,对其他进程的地址空间一无所知。有一些技术可以做到这一点(查找进程间通信),但这是一个完全不同的领域。
extern
的工作方式是允许您访问同一程序中不同C文件中定义的变量。
你似乎在一个相当基本的层面上错误地理解了你正在编写的程序是如何工作和执行的,因为你希望它能起作用。我建议阅读更多关于C是如何工作的,也许还可以了解一些操作系统如何托管程序以运行它们。
像你描述的程序之间共享信息的一种方法是将数据存储在一个文件中,该文件由一个程序(首先运行的程序)编写,另一个程序读取,但这也很难做到正确。
如果您想从另一个文件调用void inc_value()
,您应该声明它(可能在标头中):
void inc_value();
如果你想直接访问value
,你可以,因为它被声明为一个外部:
# include "test1.h"
main()
{
value = 6;
}
还要注意,在inc_value
的当前实现中,该值将在传递给printf
后递增,例如,打印的值将是前一个值。
您应该在test3.c中放入extern int值,而只在test1.h中放入int值。查看此链接:http://www.learncpp.com/cpp-tutorial/42-global-variables/希望这能帮助。。。