2 Kleine c++ vragen.

Status
Niet open voor verdere reacties.

marti901

Gebruiker
Lid geworden
30 aug 2009
Berichten
411
1
Mijn eerste vraag is denk ik heel simpel. Maar met google werd het niet echt duidelijk.
Wat is/doet #define?

2
Hoe kan ik zorgen dat x wel gevonden word?

Ik heb f het gedeelte van de code waar het om gaat na gemaakt.

Bij de return x zegt hij dat hij x niet kent.

naam.h
[CPP]class naam
{
naam::naam();
void 1();
int 2(0;
}[/CPP]

naam.cpp
[CPP]
#include <allegro.h>
#include "naam.h"

naam::naam()
{
int x = 0;
}

void 1()
{
//code;
}
END_OF_FUNCTION(1);

int 2()
{
return x ;
}
END_OF_FUNCTION(2);

[/CPP]

Alvast bedankt
 
Laatst bewerkt:
Vraag 2 ben ik al uitgekomen was spelen met pointers.

Waarom met pointers?

[cpp]
class blaat
{
int x;
public:
/* ... */
int getX() const { return x; }
};
[/cpp]

Antwoord op vraag 1: http://www.cplusplus.com/doc/tutorial/preprocessor/

edit: ook maar even meteen uitleggen waarom de code met getX() niet werkt in jouw voorbeeld: de variable x bestaat in jouw voorbeeld alleen binnen de scope van de constructor.
 
Laatst bewerkt:
zolang je ze niet geebruikt of eerst een check erop zet is het niet gevaarlijk hoor.
 
of eerst een check erop zet is het niet gevaarlijk hoor.


Vertel mij eens hoe jij wil gaan checken of een variabele niet geinitialiseerd is?

@marti901:

In principe is het geen vereiste, maar ik raad het ten zeerste aan om het wel te doen. Hiermee voorkom je een enorme hoop debugwerkzaamheden.
 
ifdef is een preprocessor directive, wordt aangeroepen dmv een hashsign (#) en controleerd de daaropvolgende MACRO.
Het heeft niks te maken met het al dan niet geïnitialiseerd zijn van een variabele.
 
ifdef is een preprocessor directive, wordt aangeroepen dmv een hashsign (#) en controleerd de daaropvolgende MACRO.
Het heeft niks te maken met het al dan niet geïnitialiseerd zijn van een variabele.

je kan het gebruken om een check te maken of iets geinitialiseerd is of niet.

Trouwens als je logisch nadenkt MOET het ook kunnen, sinds de compiler de error geeft. Het kan ook in pure asm, omdat de flag 0 is als de value niet geinitialsseerd is.
 
Beste,

Het is veel gemakkelijker om te zorgen dat je elke variabele ineens initialiseert (bvb: "int x = 0"; ipv "int x;") dan achteraf te controleren, dus als je daarmee problemen hebt, los het dan op met ze direct een (neutrale) waarde te geven. Wat erger is: een "gebrek aan initialisatie" error wijst op een fout in je programma logica: waarom wordt je variabele gebruikt als deze nog geen betekenisvolle waarde heeft?

In het begin van je programmeer carrière kan deze error nog voorkomen, maar als je die later (bij grotere programma's) nog tegenkomt, zit je ernstig in de miserie. Werk dus liever aan je programmeer logica dan aan een initialisatie controle methode.

Indien je eerste vraag nog niet voldoende beantwoord was: #define stelt het eerste woord gelijk aan het tweede. Met andere woorden, "#define NAME marti901" vervangt in de rest van de code het woord "NAME" door marti901. Dit is echter een zeer onoverzichtelijke methode die de structuur van je code niet ten goede komt. Naar mijn mening is het best deze functie niet te vlug te gebruiken; vaak zijn er veel elegantere manieren om dit op te lossen.
 
De nieuwste C++ boeken raden het ten zeerste af om #define te gebruiken, omdat dit vaak ook gevaarlijk kan zijn. En verder onnodig, lelijk en als je doordenkt slecht.
 
Beste,

Waarom dit "slecht" zou zijn zie ik niet direct in, maar qua duidelijkheid boet je veel in bij het gebruik van #define. Dit soort code stamt nog af van de C tijd en hoeft tegenwoordig (bijna?) nooit meer gebruikt te worden. Het is dus inderdaad af te raden om dit te pas en te onpas te gebruiken.
 
Beste,

Waarom dit "slecht" zou zijn zie ik niet direct in, maar qua duidelijkheid boet je veel in bij het gebruik van #define. Dit soort code stamt nog af van de C tijd en hoeft tegenwoordig (bijna?) nooit meer gebruikt te worden. Het is dus inderdaad af te raden om dit te pas en te onpas te gebruiken.

ik weet niet precies de reden, maar dat stond in het boek wat de schrijver van c++, bjorn .... schreef.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan