Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
For 2023 - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

I am also active in many other area and still look after a lot of web sites - you can find an index ((here))
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 articles
C204 - C and C based languages - Functions, Macros and programs in multiple files
  [775] Do not duplicate your code - (2006-06-23)
  [1163] A better alternative to cutting and pasting code - (2007-04-26)
  [1478] Some new C programming examples - files, structs, unions etc - (2007-12-19)
  [2570] Function Prototypes in C - (2010-01-11)
  [2575] Sharing variables between files of code in C - extern - (2010-01-14)
  [2841] C Course exercise and sample answer - source in 2 files - (2010-06-30)
  [3237] Using functions to keep look and feel apart from calculations - simple C example - (2011-04-09)
  [3717] Returning extra results from a function in C - (2012-05-03)
  [3721] Naming blocks of code, structures and Object Orientation - efficient coding in manageable chunks - (2012-05-06)
  [4338] Passing arrays into functions in C - (2014-12-02)
  [4554] Passing information into functions in C - by name, by value - (2015-10-26)
  [4555] Preprocessor directives in C and C++ - what they mean - (2015-10-27)

Back to
Strings in C - strncmp strncpy and friends
Previous and next
Horse's mouth home
Forward to
Well House Consultants - Python courses / what's special.
Some other Articles
Hello World in C++ - a first program, with the process explained
Variables, 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 friends
RUby - loading, using, changing, storing JSON format data
Scenario 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 http://www.wellho.net/horse/ - 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).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2023: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/4557_Fun ... nd-C-.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb