The meaning of both eludes
me.
Sunday, 31 December 2017
c - What is the difference between a definition and a declaration?
A
declaration introduces an identifier
and describes its type, be it a type, object, or function. A declaration is
what the compiler needs to 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
declarations
class foo; // no extern allowed for type
declarations
A
definition actually
instantiates/implements this identifier. It's what the linker
needs in order to link references to those entities. These are
definitions corresponding to the above declarations:
int bar;
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 above
extern 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 missing symbols. 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.
/>
Since the debate what is a class
declaration vs. a class definition in C++
keeps coming up (in answers and comments to other questions) , I'll paste a quote from
the C++ standard here.
At 3.1/2, C++03
says:
A
declaration is a definition unless it [...] is a class name declaration
[...].
3.1/3 then
gives a few examples. Amongst
them:
[Example:
[...]
struct S { int a; int b; }; // defines S, S::a, and S::b
[...]
struct S; // declares S
—end
example
To sum it up: The C++
standard considers struct x;
to be a
declaration and struct x {};
a
definition. (In other words, "forward
declaration" a misnomer, since there are no other forms of
class declarations in C++.)
Thanks to href="https://stackoverflow.com/users/34509/johannes-schaub-litb">litb (Johannes
Schaub) who dug out the actual chapter and verse in one of his answers.
php - file_get_contents shows unexpected output while reading a file
I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print ...
-
I have an app which needs a login and a registration with SQLite. I have the database and a user can login and register. But i would like th...
-
I got an error in my Java program. I think this happens because of the constructor is not intialized properly. My Base class Program public ...
-
I would like to use enhanced REP MOVSB (ERMSB) to get a high bandwidth for a custom memcpy . ERMSB was introduced with the Ivy Bridge micro...
No comments:
Post a Comment