我对C语言中的静态变量有一个疑问。 例如,有两个文件,一个是“ Action.c”,另一个是“ Result.c”
[在Action.c文件中] `
static uint8_t actionResult[10] = {0x00};
void getActionResult (uint8_t** resultPtr)
{
*resultPtr = actionResult;
}
[在结果中。c]
void main (void)
{
uint8_t* getResultPtr = NULL;
getActionResult(&getResultPtr);
}
我想知道这是否是从“ Action.c”文件获取价值的合法方法。而且还想知道将静态变量地址转移到其他文件是不是一个好主意?
非常感谢您。
答案 0 :(得分:1)
合法吗?是。从翻译单元外部看不到文件级静态变量,但是,如果该翻译单元以某种方式(如您所愿)发布了地址,则可以通过取消引用该地址来访问或更改它。
这是个好主意吗?并不是的。文件级静态变量的整个 point 是为了保护它们免受翻译单元外部的干扰。如果要允许这样做,那么根本就没有必要将其标记为静态。
只需将其定义为uint8_t actionResult[10] = {0x00};
,并让main
使用变量名而不是获取和取消引用其地址。