【问题标题】:static variable's address can access by other files or not静态变量的地址是否可以被其他文件访问
【发布时间】:2023-03-19 18:22:01
【问题描述】:

我有一个关于 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”文件中获取价值的合法方法。并且还想知道将静态变量地址转移到其他文件是不是坏主意?

非常感谢。

【问题讨论】:

  • 是的,这是合法的。静态变量仅在定义它的编译单元(又名源文件)中可见。但是如果一个函数提供了它的地址,那很好,因为静态变量一直存在到程序终止。这样的事情不一定是一个好主意,但它是一种选择,尽管有其他选择。顺便说一句,main() 在标准 C 中返回 int,而不是 void

标签: c pointers static


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-02-25
    • 1970-01-01
    • 2018-11-02
    • 2021-11-24
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多