在源文件inv_mpu.c中,有一个结构定义gyro_state_s
和一个文件范围变量声明:
static struct gyro_state_s st = {
.reg = ®,
.hw = &hw,
.test = &test
};
此结构中嵌套的是成员st.chip_cfg.bypass_mode
,我希望从另一个文件访问该成员。
问题:如何在另一个文件中读取此标志st.chip_cfg.bypass_mode
的状态?
我尝试过extern struct gyro_State_s st ;
,但是当我在if(!st.chip_cfg.bypass_mode)
中对其进行测试时,仍然无法识别。
答案 0 :(得分:-2)
将结构放入两个文件中包含的共享头中。
extern的意思是:“这是在其他地方定义/实例化的”
由于关闭的结构无法编译为任何物理代码(结构的实例可以编译,因此结构本身仅描述了如何创建实例),您只需要在两个文件中定义相同的结构,最好的方法是将结构放在共享的标头中,然后在需要结构的两个文件中包含标头。
答案 1 :(得分:-2)
仅仅为了访问此标志而试图公开st
的所有内容及其定义是一个错误的设计,应避免使用。 Globals are always bad,在这种情况下,您将不必要地使st
的所有内部内容对整个程序可见。
inv_mpu.c已经具有一个函数mpu_set_bypass()
,该函数在使用前会被调用,因此必须在某个地方有一个原型,很可能在现有的头文件inv_mpu.h中。现有代码样式解决方案最简单,最安全和最合理的做法是添加“ getter ”访问器对应部分mpu_get_bypass()
。
在inv_mpu.c中,您可以添加:
unsigned char mpu_get_bypass( void )
{
return st.chip_cfg.bypass_mode ;
}
将原型声明添加到inv_mpu.h中:
unsigned char mpu_get_bypass( void ) ;
然后在访问源文件中,#include "inv_mpu.h"
,然后调用getter,例如:
if( !mpu_get_bypass() ) ...