在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