C언어로 프로그램을 작성하다 보면 간과하는 것이 있습니다. 함수를 호출할 때 입력되는 인수가 어느쪽부터 전달하느냐 하는 것입니다. 일반 상수 일 때에는 관계 없지만, 함수가 한 개 이상이라면 문제가 될 수 있습니다. 에를 들어 아래 코드에서는 main() 함수에서 printf()를 호출하면서 fun_1st()와 fun_2nd()의 값을 요구하고 있습니다.

#include <stdio.h>

static int ndx_a = 0;

int fun_1st( void)
{
    ndx_a++;
}

int fun_2nd( void)
{
    return ndx_a;
}


int   main( void)
{
    printf( "main()    : fun_1st()= %d   fun_2nd= %d\n", fun_1st(), fun_2nd());
}

fun_1st()와 fun_2nd()가 차례로 인수로 입력되어 있는데 어느쪽 함수가 먼저 실행될까요? 타이핑 순서에 따라 fun_1st()가 실행되고 fun_2nd()가 실행될 것 같습니다. 그렇다면 printf()로 실행된 결과는 모두 1이 될 것입니다.

]$ ./a.out 
main()    : fun_1st()= 1   fun_2nd= 1

그러나 실제로 실행해 보면 결과가 전혀 다릅니다.

]$ ./a.out 
main()    : fun_1st()= 1   fun_2nd= 0

func_2nd()의 반환 값이 fun_1st() 실행 전의 ndx_a 값인 0 입니다. 즉, C언어에서는 함수 인수를 왼쪽에서 오른쪽이 아닌 오른쪽에서 왼쪽 순서로 인수를 전달합니다.