以下是使用printf
的简单单行程序:
void main()
{
printf("%d%d",printf("Cis"),printf("good"));
}
输出:
goodCis34
如何解释这个输出?
答案 0 :(得分:6)
首先打印good
和Cis
的原因是因为需要在调用顶级printf()
之前评估参数。
然后打印出返回值。
请注意,C未指定参数的评估顺序。语句中没有序列点。因此订单未定义。结果可以按任何顺序出现。 (因此,为什么他们似乎在这种情况下无序评估)
答案 1 :(得分:3)
Printf返回打印的字符数。 “顺”是3个字符,“好”是4。
它还将输出写入流。
因此打印“Cis”,返回3,打印出“good”,然后返回4.执行这些的顺序无法保证,因此未定义是否会获得“Cisgood”或“ goodCis”。
然后评估外部printf字符串,并返回输出“34”。
答案 2 :(得分:1)
printf("%d%d",printf("Cis"),printf("good"));
首先,评估参数。 首先评估printf(“good”)。打印出“good”并返回4(写入的字符数)。然后,评估printf(“Cis”)。打印“Cis”,返回3。评估后,功能变为如下: printf(“%d%d”,3,4);
所以,打印出34页。
答案 3 :(得分:0)
它正在评估从右到左,这意味着首先打印 good 。然后它评估第二部分 Cis 。
最后,在进行最左边的操作时,它使用这两个字符串的相应长度来填充%d个替换。
答案 4 :(得分:0)
printf
及其系列会返回打印的字符数。在你的情况下,它只是字符串的长度。但是,未指定评估参数的顺序。在您的情况下,外部printf
的第二个参数首先发生。它可能完全不同。