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

发布于 2024-11-19 00:37:03 字数 234 浏览 5 评论 0原文

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

在我看来,conversion 这个词意味着 printf("%d", 1.0) 已被定义。

请证实或反驳这一点。

According to section 4.9.6.1 of the C89 draft, %d is a character that specifies the type of conversion to be applied.

The word conversion implies, in my opinion, that printf("%d", 1.0) is defined.

Please confirm or refute this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

゛清羽墨安 2024-11-26 00:37:03

转换是将语言值转换为该值的词汇表示形式。

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

int 参数被转换为 [−]dddd 样式的有符号十进制。

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

The conversion is the conversion of a language value to a lexical representation of that value.

Your theory is wrong; behavior is undefined. The spec says (7.19.6.1p8 and 9, using C99 TC2):

The int argument is converted to signed decimal in the style [−]dddd.

And

If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.

缺⑴份安定 2024-11-26 00:37:03

Printf 是一个可变参数函数,因此无法进行转换。编译器只是安排将双精度数推入参数列表。 Printf 无法确定它是 double 与 int 与大象。结果?混乱。

Printf is a varargs function, so no conversion is possible. The compiler just arranges to push a double onto the arguments list. Printf has no way to find out that it's a double versus an int versus an elephant. Result? Chaos.

隔岸观火 2024-11-26 00:37:03

这里的“转换”一词是指将 int (这是这里唯一可接受的参数类型)转换为由该 int 的十进制表示形式组成的字符串。代码>.它与从其他类型(例如double)到int的转换无关。

The word "conversion" here is referring to the conversion of an int (which is the only acceptable argument type here) to a string of characters that make of the decimal representation of that int. It has nothing to do with conversion from other types (such as double) to int.

芯好空 2024-11-26 00:37:03

不确定它是正式未定义还是错误 - 但它是错误的!

Not sure if it's officially undefined or an error - but it's wrong!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文