对于C函数,参数是相反的

M.E*_*aka 6 c reverse arguments function-calls

我有一个函数,乘以两个矩阵A和B,然后打印结果.以两种类似的方式运行程序时,我得到了两个不同的输出.

第一:

    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));
Run Code Online (Sandbox Code Playgroud)

输出是的确切乘法

A*B.

第二:

    FILE *f;
    f = fopen("in.txt","r");
    print_mat(mat_mul_1(read_mat(f), read_mat(f)));
Run Code Online (Sandbox Code Playgroud)

输出是的确切乘法

B*A.

我想知道为什么争论被颠倒了?!

(因为'mat_mul_1'函数是一个黑盒子)

Mar*_*ers 8

您是否期望首先read_mat(f)评估第一个?

C不提供此类保证.编译器可以自由地发出以其选择的任何顺序评估参数的代码.

函数指示符的评估顺序,实际参数和实际参数中的子表达式是未指定的,但在实际调用之前有一个序列点.