我想打印一组变量,并试用了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
任何人都可以解释这种差异吗?
答案 0 :(得分:0)
您没有发布代码片段中使用的变量的定义。
如果valueFromVirtualFpgaMemory
,valueReference1
,brsRefData2Values[4].abcRefInt[42]
或valueCalculated
中的任何一个的类型大于int
,则行为未定义,可能解释输出不一致来自printf
的不同电话。
鉴于产生的输出,int
不太可能是16位,但如果是,则%u
对于类型uint32_t
不正确。为了完全可移植性,您应该使用%"PRIu32"
这种类型。 printf
中定义的类型的scanf
和<stdint.h>
格式在<inttypes.h>
中定义。
编辑:如果abcRefData2Values[4].abcRefInt[42]
是一个复数,则无法使用%u
来打印其值。