2相同变量的C-printfs打印不同的值

时间:2016-11-04 23:27:17

标签: c++ variables printf

我想打印一组变量,并试用了printf的两种用途。

...
uint32_t valueFromVirtualFpgaMemory = 0;
uint32_t valueReference1 = 0;
uint32_t valueCalculated = 0;
...
valueCalculated = XYZ.data.abcOutputInt[4].abcInt[42]; 
...
printf("valueFromVirtualFpgaMemory     : %u (stubbed, dummy value)\n",
       valueFromVirtualFpgaMemory);
printf("reference value 1 (recomposed) : %u\n", valueReference1);
printf("reference value 2              : %u\n", abcRefData2Values[4].abcRefInt[42]);
printf("calculated value               : %u\n\n", valueCalculated);

printf("valueFromVirtualFpgaMemory     : %u (stubbed, dummy value)\n"
       "reference value 1 (recomposed) : %u\n"
       "reference value 2              : %u\n"
       "calculated value               : %u\n\n",
       valueFromVirtualFpgaMemory, valueReference1,
       brsRefData2Values[4].abcRefInt[42], valueCalculated);

calculated value打印的值不同:

valueFromVirtualFpgaMemory     : 3535786687 (stubbed, dummy value)  
reference value 1 (recomposed) : 4294955712  
reference value 2              : 4294955712  
calculated value               : 3535786687  

valueFromVirtualFpgaMemory     : 3535786687 (stubbed, dummy value)  
reference value 1 (recomposed) : 4294955712  
reference value 2              : 4294955712  
calculated value               : 4294955712

任何人都可以解释这种差异吗?

1 个答案:

答案 0 :(得分:0)

您没有发布代码片段中使用的变量的定义。

如果valueFromVirtualFpgaMemoryvalueReference1brsRefData2Values[4].abcRefInt[42]valueCalculated中的任何一个的类型大于int,则行为未定义,可能解释输出不一致来自printf的不同电话。

鉴于产生的输出,int不太可能是16位,但如果是,则%u对于类型uint32_t不正确。为了完全可移植性,您应该使用%"PRIu32"这种类型。 printf中定义的类型的scanf<stdint.h>格式在<inttypes.h>中定义。

编辑:如果abcRefData2Values[4].abcRefInt[42]是一个复数,则无法使用%u来打印其值。