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

时间:2019-10-22 07:48:53

标签: c pointers static

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

[在Action.c文件中] `

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

[在结果中。c]

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

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

非常感谢您。

1 个答案:

答案 0 :(得分:1)

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

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

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