gpt4 book ai didi

c - 重构全局到局部。它们是否应该是静态的?

转载 作者:行者123 更新时间:2023-12-04 21:58:45 25 4
gpt4 key购买 nike

我正在重构“意大利面条代码”C 模块以在多任务 (RTOS) 环境中工作。

现在,有很长的函数和很多不必要的全局变量。

当我尝试用局部变量替换仅存在于一个函数中的全局变量时,我陷入了两难境地。每个全局变量的行为都像局部“静态” - 例如即使您退出并重新进入该功能,它的值(value)也会保持不变。

对于多任务处理,“静态”局部变量是全局变量中最差的。它们使函数不再重新输入。

有没有一种方法可以在不跟踪所有逻辑流的情况下检查函数是否依赖于保留变量值重入?

最佳答案

简短回答:不,没有任何方法可以根据局部变量的声明是否为静态来自动判断函数的行为是否不同。您只需检查原始代码中使用全局变量的每个函数的逻辑。

但是,如果用静态局部范围变量替换全局变量意味着该函数不可重入,那么它在全局时也不可重入。因此,我认为将全局变量更改为静态局部范围变量不会使您的函数比开始时的可重入性差。

假设全局确实只在该范围内使用(编译器/链接器应该在您删除全局时确认),行为应该接近相同。初始化时可能存在也可能不存在问题,我不记得标准是怎么说的:如果静态初始化在 C 中与在 C++ 中同时发生,当执行首先到达声明时,那么您可能已经更改了一个并发安全函数转换为非并发安全函数。

确定一个函数是否可以安全重入还需要查看逻辑。除非标准另有说明(我没有检查过),否则函数不会仅仅因为它声明了一个静态变量就自动不可重入。但是,如果它以任何重要方式使用全局或静态,您可以假设它是不可重入的。如果没有同步,则假设它也是非并发安全的。

最后,祝你好运。听起来这段代码离你想要的地方还有很长的路要走......

关于c - 重构全局到局部。它们是否应该是静态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/134459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com