Marcel: C: Prüfen ob int mit Wert initialisiert wurde

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

  1. 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

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. 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

    1. 你好 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.

      再见,
       克里斯蒂安

      --
      Renovation der Mensa-Nord | Zweitkonto
      Wer sich zu überschwänglich freut, wir später Grund zum Weinen haben.
      http://wwwtech.de/
      1. 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

        1. 你好 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.

          再见,
           克里斯蒂安

          --
          Renovation der Mensa-Nord | Zweitkonto
          Der Mund ist das Portal zum Unglück.
          http://wwwtech.de/
  3. 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

    1. 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

      --
      Es gibt Dinge, die sind sooo falsch, dass nicht einmal das Gegenteil stimmt.