A declaration introduces an identifier and describes its type, be it a type, object, or function.A declaration is what the compiler needsTo accept references to that identifier. These are declarations:
extern int bar;extern int g(int, int);double f(int, double); // extern can be omitted for function declarationsclass foo; // no extern allowed for class declarations
A definition actually instantiates/implements this identifier.It's what the linker needsIn order to link references to those entities. These are definitions corresponding to the above declarations: [a definition allocate space for the identifier // myself]
int bar; [someone said it is not only a definition but also a declaration]int g(int lhs, int rhs) {return lhs*rhs;}double f(int i, double d) {return i+d;}class foo {};
A definition can be used in the place of a declaration.
An identifier can be declared as often as you want. Thus, the following is legal in C and C ++:
double f(int, double);double f(int, double);extern double f(int, double); // the same as the two aboveextern double f(int, double);
However, it must be defined exactly once. if you forget to define something that's been declared and referenced somewhere, then the linker doesn't know what to link references to and complains about a missymsing Bols. if you define something more than once, then the linker doesn't know which of the definitions to link references to and complains about duplicated symbols.
[From website] http://stackoverflow.com/questions/1410563/what-is-the-difference-between-a-definition-and-a-declaration