请问,下列代码里,for循环的表达式4执行的时机是什么时候呢?

以下为代码

#include<stdio.h>
int main()
{
    int i;
    for (i = 0; i < 5; i++, printf("OUT:%d\n", i))
    {
    }
    printf("********************\n");
    for (i = 0; i < 5; ++i, printf("OUT:%d\n", i))
    {
    }

    return 0;
}

img

我的猜想:printf("OUT:%d\n", i) 执行时机应该在上一次循环结束后 下一次循环开始前

img

只要是位于表达式3后的所有表达式 通过逗号间隔 便可以依次执行

你代码里for循环中的i++, printf("OUT:%d\n", i)叫着逗号表达式,这个表达式作为一个整体是for循环里的迭代表达式,它会在每次迭代之后、重新计算for循环条件之前被执行。
逗号表达式里的每一项按顺序从左到右依次执行。
参考
https://en.cppreference.com/w/cpp/language/operator_other#Built-in_comma_operator
https://en.cppreference.com/w/cpp/language/for

for (表达式1; 表达式2; 表达式3) { 内嵌语句; }

执行过程为:
第一步:求解表达式1;
第二步:求解表达式2。若其值为真,则执行 for 语句中指定的“内嵌语句”,然后执行第3步;若表达式2值为假,则结束循环;
第三步:求解表达式3;
转回上面第2步继续执行;
循环结束,执行 for 语句下面的语句。
执行过程中,“表达式1”只执行一次,循环是在“表达式2”“表达式3”和“内嵌语句”之间进行的。