【发布时间】:2018-06-11 00:05:07
【问题描述】:
我刚刚看到一些类似以下的代码,其中包含带有本地 static 变量的未命名块或带有本地静态的表达式语句:
volatile uint8_t p = 1;
volatile uint8_t x = 0;
int main() {
{
static uint8_t l;
}
{
static uint8_t l;
}
uint8_t y1 = ({static uint8_t l; if (p) {l = 0;} l;});
uint8_t y2 = ({static uint8_t l; if (p) {l = 0;} l;});
return y1 + y2;
}
我想知道在这样的 未命名 块中声明变量 static 的目的是什么?
我假设(不确定)本地静态对于每个这样的块都是不同的,但是在离开该块后我无法到达它。查看目标文件显示它们在一个公共块中获得不同的名称。
(请不要对上面的代码进行推理......只是为了演示static的使用)
【问题讨论】:
-
限制标识符的范围通常是好的。这也适用于静力学。
-
第一块是废话。您应该询问实际用途,我们可以解释。
-
你写“我刚刚看到一些类似下面的代码,......”很可能你已经删除了一些上下文信息,其中包含关于为什么这样做的线索。如果不出意外,它可能是某些预处理或自动代码生成的结果,在其他情况下会产生更有用的代码。要获得正确的答案,您需要显示原始代码并可能提供有关它的其他信息。