Question: What's the difference between:

```
void function();

int main()
{......}

void function()
{......}

```

vs

```
void function()
{.......}

int main();

```

It seems odd to declare a function before main then define it after main when you could just declare and define it before main. Is it for aesthetic purposes? My teacher writes functions like the first example.

Answer: 
It's just for code organization purposes ("aesthetics", I guess). Without forward declarations you'd need to write every function before it's used, but you may want to write the bodies of a function in a different order for organizational purposes.

Using forward declarations also allows you to give a list of the functions defined in a file at the very top, without having to dig down through the implementations.

Forward declarations would also be necessary in the case of mutually recursive functions. Consider this (silly) example:

```
bool is_odd(int);  // neccesary

bool is_even(int x) {
  if (x == 0) {
    return true;
  } else {
    return is_odd(x - 1);
  }
}

bool is_odd(int x) {
  return is_even(x - 1);
}

```
Your first example is in the Top-Down style, the second in Bottom-Up style.

It's largely aesthetic, in that some people prefer one over the other.

For example, someone might prefer to get a high-level overview of the program before getting the details (top-down), while another might person might prefer to see the details first (bottom-up).

A tangible benefit of the declarations in the top-down approach is that you can more easily re-organize the function definitions without having to worry about ordering.