这两个有什么不同吗?如果是这样,究竟有什么区别?假设它们处于可以被多次调用的C函数中.
在同一声明中声明和分配
static uint32_t value = x;
// x varies and may be passed into function.
在一个陈述中声明并在下一个陈述中指定.
static uint32_t value
;
value = x; // x varies
;
难道value
只更新其声明/初始化或者甚至在后续调用的第一次.
我对(1)的理解是它只是第一次执行该行,所以即使x
下次执行该行时更改,value
也将保持不变.我不确定(2)但对两者的澄清将非常有帮助
编辑:编译器ARM(ADS1.20).编辑:关于(2)从目前为止给出的答案的后续问题.是在每次通话还是第一次重复声明(不是作业)?
第一个不应该编译; 静态变量需要一个常量初始化器.
value
每次调用函数时都会设置第二个,因此无需首先进行调用static
.
如果第一个表示法是正确的 - 初始化value
为1,比如说 - 那么它将在程序启动时初始化一次,然后在代码改变它时仅采用新值.第二种表示法仍然设置value
每次调用函数,因此使用static
无意义.(好吧,如果你足够努力,你可以设计第二个版本用于静态的场景.例如,如果函数返回指向其他代码然后修改的指针,那么可能需要它,但那是在极端的深奥,将是一个非常糟糕的"代码味道".)