printf("%d",1.0)是否未定义?

Nat*_*lin 1 c printf glibc stdio libc

根据C89草案第4.9.6.1节,%d是一个字符,用于指定要应用的转换类型.

在我看来,转换一词意味着printf("%d", 1.0)定义了.

请确认或反驳此事.

Joh*_*itb 12

转换是将语言值转换为该值的词汇表示.

你的理论是错的; 行为未定义.规范说(7.19.6.1p8和9,使用C99 TC2):

INT参数转换为符号十进制的风格[ - ] DDDD.

如果任何参数不是相应转换规范的正确类型,则行为未定义.

  • @Natan对于c89草案,您可以采用声明"如果格式的参数不足,则行为未定义.".或者仅仅缺少对于与"int"不同的参数所发生的描述(省略行为描述==未定义的行为). (3认同)

bma*_*ies 8

printf的是一个可变参数的功能,因此无需转换是可能的.编译器只是安排推双到参数列表.printf的有没有办法找出它是一个双对一个int与大象.结果?混沌.