就printf
功能而言,我从一些参考资料和实验中了解到以下内容。
- 当我们尝试使用用于 float(或)double 的格式说明符打印整数值时,反之亦然,行为是不可预测的。
- 但是可以
%c
用来打印整数值的等效字符。也可以使用 of%d
打印字符的 ASCII 值(整数表示)。
scanf
同样,如果格式说明符和传递给 scanf 的参数不匹配,则 的行为是什么。标准有定义吗?
可变参数(与省略号匹配的参数...
)是默认提升的。这意味着所有较短的整数类型都被提升为int
(或无符号,视情况而定)。整数和字符之间没有区别(我相信)。%d
和%c
in之间的区别printf
仅仅是值的格式。
scanf
是一壶不同的鱼。您传递的所有参数都是指针。指针之间没有默认提升,传递与指针类型匹配的确切格式说明符至关重要。
在任何一种情况下,如果您的格式说明符与提供的参数不匹配(例如将 an 传递int *
给 a %p
in printf
),则结果是undefined behavior,这比“不可预测”要糟糕得多——这意味着您的程序只是格式错误.