代码之家  ›  专栏  ›  技术社区  ›  S_D

表达式和参数的执行顺序如何?[已关闭]

  •  1
  • S_D  · 技术社区  · 7 年前

    因此,通过探究一切并理解std库函数的行为来学习C,我遇到了以下问题:

    在以下2个代码中;

    代码1:

    #include <stdio.h>
    
    int main()
    {
    
    printf(" %d %d",printf("Hello"),printf("Bye"));
    
    return 0;
    }
    

    输出:

    ByeHello 5 3

    代码2:

    #include <stdio.h>
    
    int main()
    {
    
    printf(" %d",printf("Hello")+printf("Bye"));
    
    return 0;
    }
    

    输出:

    你好8

    在第一个程序中;表达式似乎是从右到左执行的,但在第二段代码中,表达式是从左到右执行的。为什么会发生这种情况。表达式是如何准确执行的?

    1 回复  |  直到 7 年前
        1
  •  6
  •   haccks    7 年前

    函数参数的求值顺序不能保证为任何顺序,即求值顺序未指定。他们可以按任何顺序进行评估。

    n1570-J.1未指明的行为:

    -在函数调用中计算参数中的函数指示符、参数和子表达式的顺序(6.5.2.2)。

    6.5.2(第12页):

    函数调用中的示例

    (*pf[f1()]) (f2(), f3() + f4())
    

    功能 f1 , f2 , f3 f4 可以按任何顺序调用。[...]