Reputation: 323
I am trying to teach myself C Programming and I am using DevC++ for my IDE under Windows XP. I am a little confused on the correct way to call my own Header Files.
I have my main source file called main.c and a separate file for functions called myFunctions.c which I include in main.c using 'include "myFunctions.h" with all my function prototypes residing in this Header file.
myFunctions.c contains two functions one called showDate() and one called showScreen() and both functions can be called from main.c all well and good.
My problems started when I tried to call showDate() from within showScreen() and during compilation/linking it was complaining because I did not have a prototype inside myFunctions.c for showDate().
What I want to know is which of the following do I need to do?
All of the above seems to correct the compiler error and allow me to call the function bot from main.c and within myFunctions.c but I can not find a definitive source of which is the correct procedure.
Upvotes: 20
Views: 28372
Reputation: 2652
As everyone else had already said, you should use the first option. The general rule is that, function prototypes resides in .h files, and their implementations in .c files.
Upvotes: 1
Reputation: 391982
Use #1 -- #include in many places.
Never use #2 -- never declare anything more than once.
Rarely use #3 -- declare something in a .c file as if you're never going to reuse it.
Upvotes: 23
Reputation:
The header file should contain the prototypes. You then include it everywhere those prototypes are used, including the .c file that contains the function definitions.
BTW DecC++ is no longer being actively developed - you should consider switching to Code::Blocks instead.
Upvotes: 7
Reputation: 212534
You should choose option 1. Or order myfunctions.c so that the definition of the called function occurs before the function that calls it. By including the header in the file, you allow the compiler to catch any mismatch between the declaration and the definition.
Upvotes: 2