如何在C中确定i +++ - j

hlx*_*007 -3 c

在C中,

int i = 20;
int j = 5;
int k = i+++--j;
Run Code Online (Sandbox Code Playgroud)

为什么k = 24?

根据我的理解,k =(i)++ +( - j)所以它是(20 + 4)++ = 25.

好.这是我为测试编写的一个小程序,是的,在分配k后完成后增量.

#include <stdio.h>
int main()
{
    int i = 20;
    int k = i++;
    printf("%d\n", k);
    printf("%d\n", i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

20
21
Run Code Online (Sandbox Code Playgroud)

有谁能告诉我为什么投票?我不确定这是因为我是C的新成员.

oua*_*uah 5

C有一个着名的最大咀嚼策略规则.根据这条规则:

i+++--j
Run Code Online (Sandbox Code Playgroud)

被解析为

(i++) + (--j) 
Run Code Online (Sandbox Code Playgroud)

(C99,6.4p4)"如果输入流已被解析为预处理标记,直到给定字符,则下一个预处理标记是可构成预处理标记的最长字符序列."

当然,价值i++i和值--jj - 1,这样的价值i+++--j20 + 4相等24.