arguments are reversed for a C function

I have a function that multiply two matrices A and B then prints the result. I got two different outputs when running the program in two similar ways.

first:

    FILE *f;
    f = fopen("in.txt","r");
    struct Mat* A = read_mat(f);
    struct Mat* B = read_mat(f);
    print_mat(mat_mul_1(A, B));

the output was the exact multiplication of

A * B

second:

    FILE *f;
    f = fopen("in.txt","r");
    print_mat(mat_mul_1(read_mat(f), read_mat(f)));

the output was the exact multiplication of

B * A

I want to know why the arguments has been reversed ?!

(as the 'mat_mul_1' function is a black box)

Answers


Did you expect that the first read_mat(f) would be evaluated first?

C offers no such guarantees. The compiler is free to emit code that evaluates the arguments in any order it chooses.

The order of evaluation of the function designator, the actual arguments, and subexpressions within the actual arguments is unspeciļ¬ed, but there is a sequence point before the actual call.


Need Your Help

How to add small amount of space between bars in bargraph using jsxgraph

php jsx

The bars are too close to each other, I need small seperation between them so that it can correspond to the spaces occupied by xaxis labels

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.