我必须以不同的格式(十六进制和浮点数)访问和写入变量。为了解决这个问题,我使用了并集,使我可以像float或Hex那样写变量。
我在“大”结构中使用了它,因为我多次遇到这个问题。 现在逐行运行程序,我看到它正在同时在所有联合中编写。 (在Eclipse C / C ++上)我绝对不想要那样的方法,是否有一种解决方法可以保留联合,但可以强制它们成为变量变量?
我试图将联合名称反转:stillingDia(在{uint32_t ...}之前和之后)
// In Header file
typedef struct sensorParametersSensorSpecific{
union {uint32_t i; float f;}stillingDia ;
union {uint32_t i; float f;}stillingHei ;
}sensorParametersSensorSpecific_t;
//In another source file
void sensorSpecificInit(sensorParametersSensorSpecific_t* SS){
SS->stillingDia.f =100; // This write in the two union...
SS->stillingHei.f =0.5;
}
// in my main code
int main(){
struct sensorParametersSensorSpecific SS;
sensorSpecificInit(&SS);
printf("Dia : %f\n",SS.stillingDia.f); // prints 100.000000
printf("hei : %f\n",SS.stillingHei.f); // prints 0.5 (problem solved ?)
return 0;
}
我希望它在每个联合中都表现得像单独的变量一样…… 也许有一种更聪明的方法,我愿意接受每一个提示。
答案 0 :(得分:2)
您为每次printf
的调用都打印相同的变量。
此:
printf("hei : %f\n",SS.stillingDia.f); // prints 100.000000
应该是这样:
printf("hei : %f\n",SS.stillingHei.f); // doesn't print 100.000000
Eclipse另有说明的事实,那么……您期望什么?