[SE] Declaratie vs definitie bij vars

Forum van 1ste Bachelor Informatica.

Moderator: Praesidium

User avatar
Hellraiser
Posts: 15

[SE] Declaratie vs definitie bij vars

Post#1 » Thu May 31, 2007 7:36 pm

We zitte met een irritante c++ vraag (ik en een paar andere)

De cursus zegt:
Er is een onderscheid tussen
“declaration” en “definition”
o Declaration: wat is het (binding van de
naam met het type)
o Definition: waar is het (instantiatie van
de betrokken entiteit)
Maar hoe paste dit toe op variabelen???

int a => declaratie en def???
int *a => declaratie???
a = new int => def???

als da laatste zo is, dan klopt de cursus daar niet want ge kunt toch nog: a = new int in u zelfde block zette zonder probleem?

Hellraiser

User avatar
cG`
Posts: 75

Post#2 » Thu May 31, 2007 7:45 pm

int a; // is gewoon declaratie
a = 5; // dit is dan de definite;

int a = 5; // definitie + declaratie

int* a; // is inderdaad een declaratie;
a = new(int); // is inderdaad een definitie;

Code: Select all

als da laatste zo is, dan klopt de cursus daar niet want ge kunt toch nog: a = new int in u zelfde block zette zonder probleem? 
En waar wordt beweerd dat dit niet kan in de cursus? Zeker dat het niet over een constante pointer gaat?
[i]"Everything should be made as simple as possible, but not simpler."[/i] - Albert Einstein

User avatar
Hellraiser
Posts: 15

Post#3 » Thu May 31, 2007 7:55 pm

“One-definition rule”: declaraties
kunnen worden herhaald, definities
moeten eenmalig zijn (waarom?)
Slides bijvoorbeeld

Hellraiser

User avatar
cG`
Posts: 75

Post#4 » Thu May 31, 2007 8:04 pm

De betekenis van declaratie/definitie zou moeten kloppen in ieder geval.
Maar hetvolgende compileert in ieder geval niet hier:

int a = 5;
int a;

Dan zegt de compiler "redeclaration of.."
En wat zegt wikipedia:
The One Definition Rule (ODR) is an important concept in the C++ programming language.

In short the ODR states that:

1. In any translation unit, a template, type, function, or object can have no more than one definition. Some of these can have any number of declarations. A definition provides an instance.
2. In the entire program, an object or non-inline function cannot have more than one definition; if an object or function is used, it must have exactly one definition. You can declare an object or function that is never used, in which case you don't have to provide a definition. In no event can there be more than one definition.
3. Some things, like types, templates, and extern inline functions, can be defined in more than one translation unit. For a given entity, each definition must be the same. Non-extern objects and functions in different translation units are different entities, even if their names and types are the same.
Maw die one definition rule slaat eigenlijk niet terug op variabelen denk ik..
[i]"Everything should be made as simple as possible, but not simpler."[/i] - Albert Einstein

User avatar
Yo_rik
Posts: 69

Post#5 » Thu May 31, 2007 8:22 pm

Er is een onderscheid tussen
“declaration” en “definition”
o Declaration: wat is het (binding van de
naam met het type)
o Definition: waar is het (instantiatie van
de betrokken entiteit)
De declaratie van een variabele is altijd ook de definitie ervan, behalve als het extern keyword gebruikt wordt.
  • int a; // declaratie + definitie (a is een integer en staat hier)
    extern int a; // enkel declaratie (er bestaat ergens een integer a)

Return to “1ste Bachelor”

Who is online

Users browsing this forum: No registered users and 44 guests