Odd function declaration in Tower of Hanoi Solution

Hi,

I was recently looking for a recursive solution to the "Tower of Hanoi" problem, and I came across this:

void move(n, A, C, B)
     int n,A,B,C;
{
  if (n==1)
    printf("Move from %d to %d.\n",A,C);
  else {
    move(n-1,A,B,C);
    move(1,A,C,B);
    move(n-1,B,C,A);
  }
}
 
int main(void) {
  move(4,1,3,2);

  return 0;
}

I understand the solution, what I don't understand is the function declaration!  Why are n, A, B, and C declared just outside of the function prototype, and where is the function prototype?

Raydot.
LVL 3
RaydotAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
grg99Connect With a Mentor Commented:
The original C syntax was:

<function type> <function name> ( <param name1>, <param name2>, .... )   <param 1 type >  name1,  <param 2 type>  name2, ...


in other words:   void move(n, A, C, B)    int n,A,B,C;

----------------------------------------
this was mighty silly and repetetive syntax, just like the old FORTRAN way of declaring parameters.

Somewhere along the line the parameter syntax was loosened up so you
could use the newer syntax:   void move( int n, int a, int c, int b );
This also made it possible to pre-declare the function and parameter types.
------------------------------------------------------

I would change the functions to use the new-style headers.  The semantics should be just the same.


 
0
 
grg99Commented:
This is an old-style function declaration.  It took the C Wizards about a decade to figure out it made more sense to declare the types alongsides the parameters.  

0
 
RaydotAuthor Commented:
"declare the types alongsides the parameters" -- huh?  

0
 
RaydotAuthor Commented:
What the problem was is that the program didn't work when I converted it to the "new" function declaration, but that turned out to be because I re-wrote the prototype as

void move(int n, int A, int B, int C)

and not

void move(int n, int A, int, C, int B)

...and hence my confusion.  Thanks for your help.
0
All Courses

From novice to tech pro — start learning today.