不久前,我正在寻找导致错误数字数据写入日志文件的错误。原来问题在于该代码等效于以下内容:
int main(void) {
struct {
double a;
int b;
} s = { 1, 2 };
printf("%lf\n", s.a);
printf("%lf\n", s.b);
}
正在输出
1.000000
1.000000
显然printf
期待浮点寄存器中的第二个值,而不是堆栈中的值。为了防止将来发生此类错误,是否应该强制转换所有 printf 参数以确保它们确实是预期的类型?