首页 > 解决方案 > 静态变量的地址是否可以被其他文件访问

问题描述

我有一个关于 C 语言中的静态变量的问题。例如,有两个文件,一个是“Action.c”,另一个是“Result.c”

[在 Action.c 文件中] `

static uint8_t actionResult[10] = {0x00};
void getActionResult (uint8_t** resultPtr)
{
    *resultPtr = actionResult;
}

[在 Result.c 中]

void main (void)
{
    uint8_t* getResultPtr = NULL;
    getActionResult(&getResultPtr);
}

我想知道这是从“Action.c”文件中获取价值的合法方法。并且还想知道将静态变量地址转移到其他文件是否是个坏主意?

太感谢了。

标签: cpointersstatic

解决方案


合法吗?是的。无法从翻译单元外部看到文件级静态变量,但是,如果该翻译单元以某种方式发布地址(如您所见),则可以通过取消引用该地址来访问或更改它。

这是个好主意吗?并不真地。文件级静态的全部意义在于保护它们免受翻译单元之外的事物的影响。如果您要允许这样做,则根本没有将其标记为静态的意义。

只需将其定义为uint8_t actionResult[10] = {0x00};main使用变量名,而不是获取和取消引用其地址。


推荐阅读