静态变量的地址是否可以被其他文件访问

问题描述 投票:2回答:1

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

[In 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”文件获取价值的合法方法。而且还想知道将静态变量地址转移到其他文件是不是个好主意?

非常感谢。

c pointers static
1个回答
1
投票

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

这是个好主意吗?并不是的。文件级静态变量的整个point是为了保护它们免受翻译单元外部的干扰。如果您要允许这样做,那么根本就没有必要将其标记为静态。

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

© www.soinside.com 2019 - 2024. All rights reserved.