That depends on the situation.
First understand how this works
If the function is in another file or is after the point in a file where it is used, you need to declare the 'prototype' for it at the top so the compiler knows what to expect.
For instance, in the same code file you have:
void do_something( CHAR_DATA *ch )
void some_function( CHAR_DATA *ch)
send_to_char( "Hello!\n\r", ch );
The compiler will give you that error since 'some_function' is actually 'defined' after it's been used. Now, if before the 'do_something' command you had:
void some_function( CHAR_DATA *ch );
This gives a 'heads-up' to the compiler about the function. You're telling it 'It'll be there, don't worry!' and also telling it what arguments to expect.
The same goes for functions in other code files. Now I'm not sure if the order of processing is taken into account, meaning if some_function() was declared in a file compiled before this one, if it'd still error out... I believe it would since it's in a different file.
So in essence, if you know the function is in your code somewhere, and that the file it is in is being passed to the compiler (check your Makefile!), then yes - declaring a prototype should fix it. Otherwise, you need to write the function.