C: Prüfen ob int mit Wert initialisiert wurde
Marcel
- programmiertechnik
Hallo
Ich möchte prüfen ob eine Variable z.B. mit
int i = 0;
oder
int i;
initialisiert wurde. Ist das möglich? ( Bei globalen Variablen ist ja standard int immer 0 )
Gruss Marcel
Hi,
Ich möchte prüfen ob eine Variable z.B. mit
int i = 0;
oder
int i;
initialisiert wurde. Ist das möglich? ( Bei globalen Variablen ist ja standard int immer 0 )
Nein. Eine int-Variable enthält immer einen gültigen int-Wert (nämlich die, die durch die bits im Speicher an der Adresse, die für die Variable reserviert wurde, rumliegen). Ob diese bits zufällig oder aufgrund einer Wertzuweisung einem bestimmten Wert entsprechen, ist programmtechnisch nachträglich nicht mehr zu ermitteln.
Das ginge nur durch Analyse des Quelltexts, nicht aber durch Analyse des Variablenwerts.
cu,
Andreas
Moin!
Ich möchte prüfen ob eine Variable z.B. mit
int i = 0;
oder
int i;
initialisiert wurde. Ist das möglich?
Von der Theorie her sollte das schon möglich sein, da AFAIK im zweiten Fall irgendetwas in i steht, C sichert mich ja in der dieser Hinsicht nichts zu. Bei allerdings den meisten Compilern, die ich kenne, läuft beides auf das gleiche heraus, d.h. i wird stets mit 0 initialisiert. du kannst ja ein kleines Testprogramm schreiben:
#include <stdio.h>
int main(void) {
int i = 0;
int j;
printf("i = %i, j = %i\n", i, j);
return 0;
}
( Bei globalen Variablen ist ja standard int immer 0 )
In C++ auch ;-)
Viele Grüße,
Robert
你好 Robert,
( Bei globalen Variablen ist ja standard int immer 0 )
In C++ auch ;-)
Auch bei C++ ist der Inhalt einer globalen, nicht initialisierten Variablen
zufällig.
再见,
克里斯蒂安
Moin 克里斯蒂安!
( Bei globalen Variablen ist ja standard int immer 0 )
In C++ auch ;-)
Auch bei C++ ist der Inhalt einer globalen, nicht initialisierten Variablen zufällig.
Werden nicht auch bei globalen Variablen vor dem Aufruf von main() deren Konstruktoren aufgerufen, z.B. std::cout?
Soweit ich weiß, ist int i;
äquivalent zu int i = int();
(analog zu int i = 1;
und int i = int(1);
), wobei int()
meiner Meinung nach den Defaultwert 0 zurückgibt.
Viele Grüße,
Robert
你好 Robert,
Werden nicht auch bei globalen Variablen vor dem Aufruf von main() deren
Konstruktoren aufgerufen, z.B. std::cout?
Ja, du hast Recht. Ich habe mich geirrt.
再见,
克里斯蒂安
Hi Marcel,
Ist das möglich?
Wie schon geschrieben wurde: nein, das geht nicht.
( Bei globalen Variablen ist ja standard int immer 0 )
Hupps? Das ist aber compiler-abhängig, darauf solltest du dich nicht verlassen. Mir ist ehrlich gesagt auch keiner mit diesem Verhalten bekannt, persönlich gearbeitet habe ich aber bisher nur mit verschiedenen Versionen von MS-C/C++ und IBM VisualAge C++.
Gruß,
Martin
Hallo Leute,
( Bei globalen Variablen ist ja standard int immer 0 )
Hupps? Das ist aber compiler-abhängig, darauf solltest du dich nicht verlassen.
ja, dem guten Rat kann ich mich nur anschließen. Der Wert von nicht initialisierten Variablen ist prinzipiell nicht festgelegt. Es ist kein Widerspruch, wenn manche Compiler diese Variablen möglicherweise implizit mit 0 initialisieren.
Mir ist ehrlich gesagt auch keiner mit diesem Verhalten bekannt, persönlich gearbeitet habe ich aber bisher nur mit verschiedenen Versionen von MS-C/C++ und IBM VisualAge C++.
Als Ergänzung: Der Borland-Compiler initialisiert auch nicht selbständig. Auch hier ist der Wert nicht initialisierter Variablen zufällig.
Schönen Abend noch,
Martin