Schrift
[thread]11584[/thread]

defined(variable)

Leser: 10


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
pktm
 2008-04-06 01:24
#107931 #107931
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Wie kann ich feststellen, ob eine Variable mit einem Wert belegt wurde?

Code: (dl )
1
2
3
4
5
6
int x;
if( ??? ) {
cout << "hat wert";
}else{
cout << "leer";
}


Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
murphy
 2008-04-06 04:23
#107935 #107935
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Das ist nicht möglich. Oder anders ausgedrückt: Die Variable ist immer mit einem Wert belegt – im Falle einer nicht initialisierten lokalen Variablen der Speicherklasse auto, wie der in Deinem Beispiel, ist dieser Wert zwar relativ zufällig, aber dennoch nicht von einem explizit zugewiesenen Wert unterscheidbar...
When C++ is your hammer, every problem looks like your thumb.
pktm
 2008-04-06 14:17
#107938 #107938
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hui, und wie will ich dann feststellen, ob was in der Variable drin ist? Indem ich irgend einen Wert abprüfe? Sowas wie if( x =< 0 || x > 0 ) und dann die Exception abfange?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Gast Gast
 2008-04-06 15:31
#107942 #107942
Nach dem "int x" steht irgendein zufälliger Intergerwert in der Variable. (meinst 0)
Wenn du wissen willst ob ein du der Variable schon mal einen Wert zugewisen hast, brauchst du entweder ein struct, der neben dem Wert noch ein Boolwert enthält, oder du setzt den Wert zu Anfang so wie er später nie gesetzt werden kann, oder du erzeugst eine Boolvariable (z.B. x_used)
pktm
 2008-04-06 15:34
#107943 #107943
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ah ok. Habe mich für die zweite Variante entschieden.
Danke.
http://www.intergastro-service.de (mein erstes CMS :) )
murphy
 2008-04-06 23:29
#107967 #107967
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
pktm+2008-04-06 12:17:48--
Hui, und wie will ich dann feststellen, ob was in der Variable drin ist?


Nur um das nochmal klar zu stellen: Die Frage, ob in der Variablen etwas drin ist, ist sinnlos. Die Antwort ist immer ja. In der Variablen ist immer irgendein Wert gespeichert.

Quote
Indem ich irgend einen Wert abprüfe? Sowas wie if( x =< 0 || x > 0 ) und dann die Exception abfange?


Bei dem erwähnten Befehl wird es niemals eine Exception geben!
When C++ is your hammer, every problem looks like your thumb.
pktm
 2008-04-07 00:16
#107969 #107969
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Bei mir kam da aber eine!?

Quote
Run-Time Check Failure #3 - The variable 'x' is being used without being initialized.
http://www.intergastro-service.de (mein erstes CMS :) )
betterworld
 2008-04-07 05:09
#107978 #107978
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
pktm+2008-04-06 22:16:24--
Bei mir kam da aber eine!?

Quote
Run-Time Check Failure #3 - The variable 'x' is being used without being initialized.

Beschreib mal Deine Entwicklungsumgebung ganz genau.
murphy
 2008-04-07 05:11
#107979 #107979
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
@pktm: Interessant! Welchen Compiler verwendest Du denn? Ich habe das gerade mal mit dem GCC 4.0.1 getestet, da produziert folgendes Programm lediglich eine Warnung beim Kompilieren:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int nargs, char **args) {
int x;
cout << x << endl;

return EXIT_SUCCESS;
}


Wenn Dein Compiler natürlich sowieso für jede lokale Variable noch Managementcode einfügt und ein Flag erzeugt, das speichert, ob sie belegt ist, um solche Laufzeitfehler, wie Du sie beschreibst, erzeugen zu können, dann gibt's vielleicht auch eine Funktion um dieses Flag abzufragen...
When C++ is your hammer, every problem looks like your thumb.
pktm
 2008-04-07 14:56
#107994 #107994
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Also, nochmal schnell getestet. Das Programm erzeugt zwar diesen Fehler, welcher in meiner Entwicklungsumgebung VisualStudio Epress 2008 hässlich aufpoppt, aber das Programm läuft dennoch weiter. (Wo finde ich eigentlich dort Informationen zum Compiler? Der war da nämlich dabei).
Für mein Problem mit den nicht initialisierten Variablen stellt mich das vor ein ungeheures Problem.
Ich soll nämlich eine Funktion schreiben, die prüft, ob ein Objekt ordentlich initialisiert wurde, also alle Variablen belegt wurden und auch sonst alles in Ordnung ist.
Wenn ich das aber nun über eine Variable ansich gar nicht feststellen kann muss ich ja für jede Variable eine Art "Workaround" finden, z.B: die Struct oder diese prinzipiell unmöglichen Werte :-s

Warum können die nicht so ein defined() wie in Perl haben?
http://www.intergastro-service.de (mein erstes CMS :) )
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2008-04-06 01:24.