【发布时间】:2020-06-14 12:20:40
【问题描述】:
我正在使用 STM32F103 和 Keil 作为编译器。这是我的摘要代码: 有一个像 abc.h 这样的头文件,而 abc 文件有一个静态变量。 abc.h 是这样的:
static uint8 a;
在另一个名为 abcd.h 的头文件中有一个函数,它改变了 a 的值。 abcd.h头文件就是这样的。
include "abc.h"
void foo()
{
a = 0x0A;
}
我的问题是: 当我在主函数“a”中调用“foo”函数时,即使我在“foo()”函数中将“a”变量分配给 0x0A,也会变为零。顺便说一句,如果我用 extern 定义“a”变量并且问题不会发生。我的意思是“a”是获取 0x0A 值。
有没有人帮我看看为什么会出现这个问题。
【问题讨论】:
-
您有两个不同的对象,它们具有不同的范围,使用相同的标识符。在代码中的几个位置尝试
printf("adress of object identified with a: %p\n", &a);,其中任何标识符a都在范围内。使用extern是生成单个对象的正确方向。 -
我不想将变量初始化为 extern,因为将变量初始化为 extern 时。它变成了一个全局变量,我不想要它。我期待另一个解决方案。
-
@alptekinkarabacak 如果同一个变量需要被多个 C 文件中的代码修改,则该变量是全局变量。一个变量不能既是全局的又不是全局的。
-
@alptekinkarabacak :我假设“全球”,您的意思是“外部链接”?如果您希望能够从不同的编译单元访问相同的变量,您需要外部链接。
标签: c variables header stm32 keil