关于C语言中作用域的问题,在看openpilot源码的时候对一处作用域的用法不理解
在openpilot源码中,滤波部分的代码中有一处,将矩阵转化为array形式的代码,函数深入之后发现对其中一段宏定义的代码不能理解,下面贴出代码,还望能够高人指点一二。
下面是一个循环,将数据转化为13组数组的形式
for (t = 0; t < EKFCONFIGURATION_P_NUMELEM; t++) {
if (invalid_var(EKFConfigurationPToArray(this->ekfConfiguration.P)[t])) {
return 2;
}
}
下面是EKFConfigurationPToArray() 函数的宏定义
#define EKFConfigurationPToArray( var ) UAVObjectFieldToArray( EKFConfigurationPData, var )
再深入一层到UAVObjectFieldToArray() 的宏定义
/**
* helper macro to access multi-element fields as array
*/
#define UAVObjectFieldToArray(type, var) \
(*({ type *const dummy = &(var); \
&(((type##Array *)dummy)->array); } \
))
上面的宏定义中
{ type *const dummy = &(var); \
&(((type##Array *)dummy)->array); }
是一个作用域。
但是为什么在这个作用域前面还要加上*,这个用法的作用是什么,思考了很久还是想不明白,希望高人能解答一下,谢谢!!