• Is the output of this program compiler dependent?

    From Satan@satan@dot.com to comp.std.c on Mon Jan 17 03:00:00 2022
    From Newsgroup: comp.std.c

    I read somewhere that the parameters of functions are evaluated right >>
    to left but it all depends on the compiler. Therefore, does this mean
    that the output of this program is "undefined" meaning there is no
    definite answer!

    #include <stdio.h>

    void fun(int, int);

    int main()
    {
    int i = 5;
    fun(--i, i++);
    fun(++i, i--);
    printf("From Main: %d\n", i++);

    return 0;
    }

    void fun(int x, int y)
    {
    printf("From Function: %d %d\n", x++, y--);
    }
    --- Synchronet 3.19b-Linux NewsLink 1.113
  • From Richard Damon@Richard@Damon-Family.org to comp.std.c on Sun Jan 16 23:18:02 2022
    From Newsgroup: comp.std.c

    On 1/16/22 10:00 PM, Satan wrote:
    I read somewhere that the parameters of functions are evaluated right >>
    to left but it all depends on the compiler. Therefore, does this mean
    that the output of this program is "undefined" meaning there is no
    definite answer!

    #include <stdio.h>

    void fun(int, int);

    int main()
    {
    int i = 5;
    fun(--i, i++);
    fun(++i, i--);
    printf("From Main: %d\n", i++);

    return 0;
    }

    void fun(int x, int y)
    {
    printf("From Function: %d %d\n", x++, y--);
    }


    Yes, there is no sequencing between the evaluation of the various
    parameters to the function, to those calls invoke undefined behavior.

    Implementations might give additional promises, but that is beyond the
    control of the standard, and there may be a 'normal' order they follow,
    but that still doesn't make it a requirement, and you might get burned
    by a case where the implementation did it different in some case because
    of ...reasons... so do go by what seems to work.

    Remember, doing what you expected is perfectly fine possible undefined behavior, but you shouldn't count on it.
    --- Synchronet 3.19b-Linux NewsLink 1.113