c - 静态变量的地址是否可以被其他文件访问
问题描述
我有一个关于 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”文件中获取价值的合法方法。并且还想知道将静态变量地址转移到其他文件是否是个坏主意?
太感谢了。
解决方案
合法吗?是的。无法从翻译单元外部看到文件级静态变量,但是,如果该翻译单元以某种方式发布地址(如您所见),则可以通过取消引用该地址来访问或更改它。
这是个好主意吗?并不真地。文件级静态的全部意义在于保护它们免受翻译单元之外的事物的影响。如果您要允许这样做,则根本没有将其标记为静态的意义。
只需将其定义为uint8_t actionResult[10] = {0x00};
并main
使用变量名,而不是获取和取消引用其地址。
推荐阅读
- powershell - Powershell - 如何搜索(使用通配符)和替换 CSV 文件中的值?
- image-processing - 我的测试损失达到数百万是否正常
- performance - Haskell 分析中的杂质或随机性
- python - 如何在 Python 中结合使用 Request 和 BeautifulSoup 来加速 Webscraping?
- python - Python如何找到椭圆周围每个点的坐标
- angular - Angular - map 将嵌套数组从初始对象转换为空数组
- android - 如何获取 JSON 嵌套对象
- reactjs - FlatList 不使用 React Hooks 渲染
- laravel - 检查“comment”是否是第一个,然后不要删除它
- c - 为什么我在分叉时会得到这个变量的两个值?