用C++操作符执行printf

在C中考虑下面的语句并预测其输出。

null
printf("%d %d %d", i, ++i, i++);

此语句调用 未定义的行为 通过引用参数列表中的“i”和“i++”。它没有定义参数的求值顺序。不同的编译器可以选择不同的顺序。单个编译器也可以在不同的时间选择不同的顺序。

例如,以下三条printf()语句也可能导致未定义的行为:

C

// C Program to demonstrate the three printf() statements
// that cause undefined behavior
#include <stdio.h>
// Driver Code
int main()
{
volatile int a = 10;
printf ( "%d %d" , a, a++);
a = 10;
printf ( "%d %d" , a++, a);
a = 10;
printf ( "%d %d %d" , a, a++, ++a);
return 0;
}


输出

11 10
10 10
12 11 11

说明: 通常 编译器从中读取printf()的参数 从右向左 。因此,将首先执行“a++”,因为它是第一条printf()语句的最后一个参数。它将打印10张。虽然,现在该值增加了1,所以最后一个参数,即,将打印11。类似地,其他语句也将被执行。

注: 在里面 前增量 ,即。, ++a ,在打印前将值增加1,在 后增操作 ,即。, a++ ,它首先打印值,然后将值递增1。

因此,不建议在同一语句中不使用两个或两个以上的前置或后置运算符。这意味着在这个过程中绝对没有时间顺序。这些论点可以按任何顺序进行评估,评估的过程可以以任何方式交织在一起。

本文由 斯普尔蒂·阿曼 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享