我有一个像
这样的结构的typedeftypedef struct { double x, y; } ACVector;
当我在调试器中查看这个实例时,我会得到非常奇怪的输出,例如
(lldb) p _translation
(ACVector) $1 = {
(double) x = -5503.61
(double) y = -5503.61
(CLLocationDegrees) latitude = -5503.61
(CLLocationDegrees) longitude = -1315.67
}
(lldb) p _translation.x
(double) $2 = -5503.61
(lldb) p _translation.y
(double) $2 = -5503.61
如果我将ACVector的定义更改为
typedef struct ACVector { double x, y; } ACVector;
并在调试器中执行相同的操作我得到了我期望的结果
(lldb) p _translation
(ACVector) $1 = {
(double) x = -5503.61
(double) y = -1315.67
}
对typedef
使用匿名结构是合法的_translation的声明是一个实例变量
ACVector _translation;
我使用此函数初始化变量
ACVector ACVectorMake( double x, double y )
{
ACVector r;
r.x = x;
r.y = y;
return r;
}
喜欢这个
_translation = ACVectorMake( d[xp[0]].x-s[xp[0]].x, d[xp[0]].y-s[xp[0]].y );
原来是
ACVector ACVectorMake( double x, double y )
{
return (ACVector){x,y};
}
纬度和经度元素在调试器输出中的位置,请注意您无法单独访问它们
我有两个定义
#define ACVectorZero (ACVector){(double)0.0,(double)0.0}
#define ACVectorUnit (ACVector){(double)1.0,(double)1.0}
有趣的是直接跟着
#define ACDegreesFromDegreesMinutesSeconds( d, m, s ) (CLLocationDegrees)(d+m/60.0+s/3600.0)
#define ACLocationFromDegreesMinutesSeconds( yd, ym, ys, xd, xm, xs ) (CLLocationCoordinate2D){ACDegreesFromDegreesMinutesSeconds( xd, xm, xs ), ACDegreesFromDegreesMinutesSeconds( yd, ym, ys )}
可以解释或许可以解释ACVector中纬度和经度的出现
搜索包含在库中的ACVector的每次出现都找不到任何其他出现的ACVector定义
答案 0 :(得分:0)
我敢打赌,您可能在变量声明中使用struct ACVector _translation
而不是ACVector _translation
。
请向我们展示更多代码。
答案 1 :(得分:0)
根据
在6.7.4函数说明符
下12
The one exception allows the value of a restricted pointer to be carried
out of the block in which it (or, more
precisely, the ordinary identifier used to designate it) is declared when
that block finishes execution.
有关 例如,这允许new_vector返回一个向量。
typedef struct { int n; float * restrict v; } vector;
vector new_vector(int n)
{
vector t;
t.n = n;
t.v = malloc(n * sizeof (float));
return t;
}
所以现在我们可以说
对typedef
使用匿名结构是合法的所以现在你正在为你做其他一些意想不到的行为......