NEW SERVER - 11.9.2020 ... Retiring, March 2020 - sorry, you have missed our final public course.
The Coronavirus situation has lead us to suspend public training - which was on the cards anyway, with no plans to resume
Please ask about private 'maintenance' training for Python, Tcl, Perl, PHP, Lua, etc
Happily continuing private consultancy / programming work
Function prototype - what they are and why you should use them - C and C++
In C and C++, your program if it's anything but trivial will be written in multiple source files. Each will be compiled into a snippet of runnable code - an "object" file - before all of these object files are linked / loaded together, and with standard libraries, using a program known by various names over the years such as "task builder" and more obviously "loader". You may think of the output from the loader as a complete program, though these days shared libraries may be dynamically loaded at runtime in order to avoid the repetition is large numbers of programs of the same code for things like outputting text.
Your multiple source files are connected at load time via calls in your main and higher level program code to methods or functions in the code that's at a lower level, and it's useful at compile time (when you're working on individual code sections) to know that you have the calls right - that you've written the correct names for the functions, and that the number and type of parameters you've used is going to be what's expected by the code you're calling in another file. And to get this right, you use function prototypes
- declarations of valid function calls for the compiler to check against at compile time rather than later on.
Function prototypes are like function definitions without the block of code or variable names - for example:
int spaces(int *,int);
defines a function that is called with an integer pointer (an array, perhaps) and a second integer, and returns an integer. To make it more readable, names could be given to the parameters:
int spaces(int *values,int counter);
but those extra words are really just comments.
In order to share your function prototypes between many source files that may call them, function prototypes are often written into header files (.h is the convention) and read into each source file that may call the fuctions by the C preprocessor using the #include
directive. That way, you've just got one file of headers to maintain.
Although function prototypes feel unnecessary, they save you a huge amount of heartache later in the compile - or even run time - with your program. Better to have a bit of early codeing expense that to find a problem later on when you come to load, or worse to find the problem at runtime. For if you get the call sequence wrong, you can end up with some program bugs that are really hard to find. Even experienced coders dread "Bus Error", "Segmentation Fault" or "Segmentation Violation".
These error messages all really mean that your program has tried to access data that's outside your addressing space - whether it's trying to access the system bus, memory space that's not yours or memory that doesn't exist will effect which message you happen to get. There are many causes - but the most common one you'll experience without function prototypes is damaged function calls where the pieced of the jigsaw haven't fitted properly together. And the error tends not to be flagged at the point of error - but later on when the error causes further problems. Moral - use function prototypes, even if they feel like they're a pain! (written 2015-10-27)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articlesC204 - C and C based languages - Functions, Macros and programs in multiple files 
Preprocessor directives in C and C++ - what they mean - (2015-10-27) 
Passing information into functions in C - by name, by value - (2015-10-26) 
Passing arrays into functions in C - (2014-12-02) 
Naming blocks of code, structures and Object Orientation - efficient coding in manageable chunks - (2012-05-06) 
Returning extra results from a function in C - (2012-05-03) 
Using functions to keep look and feel apart from calculations - simple C example - (2011-04-09) 
C Course exercise and sample answer - source in 2 files - (2010-06-30) 
Sharing variables between files of code in C - extern - (2010-01-14) 
Function Prototypes in C - (2010-01-11) 
Some new C programming examples - files, structs, unions etc - (2007-12-19) 
A better alternative to cutting and pasting code - (2007-04-26) 
Do not duplicate your code - (2006-06-23)
Some other Articles
Hello World in C++ - a first program, with the process explainedVariables, Pointers and References - C and C++When do I use the this keyword in C++?Well House Consultants - Python courses / what's special.Function prototype - what they are and why you should use them - C and C++Strings in C - strncmp strncpy and friendsRUby - loading, using, changing, storing JSON format dataScenario outlines - tables of values to test - in Gherkin / Cucumber
4759 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 at 50 posts per page
This is a page archived from The Horse's Mouth at
the diary and writings of Graham Ellis.
Every attempt was made to provide current information at the time the
page was written, but things do move forward in our business - new software
releases, price changes, new techniques. Please check back via
our main site for current courses,
prices, versions, etc - any mention of a price in "The Horse's Mouth"
cannot be taken as an offer to supply at that price.
Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).