gccの関数の引数呼び出し順

gccの関数の引数の評価は、後ろの引数から評価されていくんですね。知らなかった。

int main()
{
  test(a(),b());
  return 0;
}
void test(int a,int b){}
int a(){ printf("a\n");return 0;}
int b(){ printf("b\n");return 0;}

として実行すると、

a
b

とはならずに

b
a

となります。
gdcd言語も呼び出し順が異なるようで、ずいぶん悩んでしまいました。