答案 0 :(得分:12)
转换是将语言值转换为该值的词汇表示。
你的理论是错误的;行为未定义。规范说(7.19.6.1p8和9,使用C99 TC2):
int 参数在样式[ - ] dddd中转换为带符号的十进制数。
并且
如果任何参数不是相应转换规范的正确类型,则行为未定义。
答案 1 :(得分:8)
Printf是一个varargs函数,因此无法进行转换。编译器只是安排将double推入参数列表。 Printf没有办法发现它是一个双重而不是一个int而不是一个大象。结果?混乱。
答案 2 :(得分:2)
这里的“转换”一词是指将int
(这是唯一可接受的参数类型)转换为由int
的十进制表示形成的字符串。它与从其他类型(例如double
)到int
的转换无关。
答案 3 :(得分:0)
不确定它是否正式未定义或错误 - 但这是错误的!