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'函数是一个黑盒子)
您是否期望首先read_mat(f)评估第一个?
C不提供此类保证.编译器可以自由地发出以其选择的任何顺序评估参数的代码.
函数指示符的评估顺序,实际参数和实际参数中的子表达式是未指定的,但在实际调用之前有一个序列点.
| 归档时间: |
|
| 查看次数: |
213 次 |
| 最近记录: |