Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win


Odd function declaration in Tower of Hanoi Solution

Posted on 2004-10-31
Medium Priority
Last Modified: 2010-04-15

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 {
int main(void) {

  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?

Question by:Raydot
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
LVL 22

Expert Comment

ID: 12456716
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.  


Author Comment

ID: 12462818
"declare the types alongsides the parameters" -- huh?  

LVL 22

Accepted Solution

grg99 earned 200 total points
ID: 12466103
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.


Author Comment

ID: 12474591
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.

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
Examines three attack vectors, specifically, the different types of malware used in malicious attacks, web application attacks, and finally, network based attacks.  Concludes by examining the means of securing and protecting critical systems and inf…
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.
The goal of this video is to provide viewers with basic examples to understand how to use strings and some functions related to them in the C programming language.
Suggested Courses

636 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question