Deklaration einer globalen Variablen außerhalb einer Klasse



  • Shade Of Mine schrieb:

    PS:
    folgendes ist legal:

    extern int i;
    extern int i;
    extern int i;
    extern int i;
    extern int i;
    extern int i;
    

    Ja sicher, aber wieso denn jetzt plötzlich extern???
    Es ging doch um globale Variabeln und wenn er die im Haeder deklariert und mehrfach includiert, umgeht er doch gerade extern.



  • nirsaja schrieb:

    Ja sicher, aber wieso denn jetzt plötzlich extern???
    Es ging doch um globale Variabeln und wenn er die im Haeder deklariert und mehrfach includiert, umgeht er doch gerade extern.

    Ja - ich hab doch ne Deklaration von i gepostet.
    Eine Variable deklariert man halt mit extern - sonst wäre es ja ne Definition...

    siehe FAQ: http://www.c-plusplus.net/forum/viewtopic.php?t=61231



  • Hmm... und

    int i;
    

    ist keine Deklaration?

    Naja das ist wiederum mir noch nie aufgefallen..



  • nirsaja schrieb:

    Hmm... und

    int i;
    

    ist keine Deklaration?

    Naja das ist wiederum mir noch nie aufgefallen..

    Jein. Es ist eine Definition. Und jede Definition ist natürlich irgendwie auch eine Deklaration - bzw. beinhaltet einige merkmale einer Deklaration.

    Deklaration sagt: Es gibt irgendwo eine Variable i des Typs int
    Definition sagt: Hier ist die Variable i vom Typ int

    Das bedeutet, dass eine Definition natürlich auch eine Bekanntmachung ist 😉
    Aber im Prinzip ist die Bezeichnung von
    int i;
    als Deklaration ein Fehler.



  • naja... ich geh mal davon aus, dass du mehr Ahnung als ich hast und glaube dir. Mein Compiler sagt jedenfalls bei

    int i;
    int i;
    
    [C++ Error] Unit1.cpp(1): E2238 Multiple [b]declaration[/b] for 'i'
    [C++ Error] Unit1.cpp(2): E2344 Earlier [b]declaration[/b] of 'i'
    

    Aber sind wir doch mal ehrlich... eigentlich ist dass hier gerade ziemlich off topic. BorlandUser hat sich ja offensichtlich schon selbst geholfen!



  • Finde ich interessant.

    Ist das der Borland C++ Compiler? Welche Version?

    Also mein gcc (3.3.2) sagt:
    error: redefinition of `int i'

    Und comeau online sagt
    error: variable "i" has already been defined

    Ich würde sagen, dass dein Compiler da etwas ungenau ist. Denn ich sehe keine 'Redeklaration' nur eine 'Redefinition'.

    Klar sind wir OffTopic - aber ich finde sowas interessant. Und man kann ne Menge bei sowas lernen...



  • Shade Of Mine schrieb:

    Klar sind wir OffTopic - aber ich finde sowas interessant. Und man kann ne Menge bei sowas lernen...

    Jup...

    Ich benutze den Borland C++ Builder 6.0 Enterprise.

    bei

    extern int i;
    extern int i;
    extern int i;
    

    hat er keine Einwände, was aber auch verständlich ist.



  • Eine Redeklaration kann doch auch nicht fehlerhaft sein, oder?

    Wenn zwei mal gesagt wird, dass irgendwo i existiert, ist das ja kein Problem, anders, wenn man sagt:
    Hier ist i.

    Dann kann es zu Problemen kommen...



  • Mis2com schrieb:

    Eine Redeklaration kann doch auch nicht fehlerhaft sein, oder?

    genau das habe ich ja gesagt



  • Meinen wir das nicht alle?

    nirsaja schrieb:

    keine Einwände, was aber auch verständlich ist.


Anmelden zum Antworten