Unterschied Deklaration und Definiton



  • in dem Buch C von A bis Z steht folgendes:

    /* deklarieren.c */
    #include <stdio.h>
    
    int main(void) {
       int a;  // Deklaration
       int b;
       int c;
       a=5;    // Initialisieren
       b=100;
       c=12345;
       printf("Wert von int a=%d ,b=%d, c=%d\n",a,b,c);
       return 0;
    }
    

    Achtung: Um Irritationen zu vermeiden, soll der Unterschied der Begriffe "Deklaration" und "Definition" erwähnt werden. Häufig hat es den Anschein, als bedeuteten beide dasselbe. Dies trifft jedoch nicht zu. Erst wenn bei einer Variablen-Deklaration eine Initialisierung vorgenommen wird, handelt es sich um eine Definition.

    müsste es nicht wie folgt lauten:
    [cpp]
    /* deklarieren.c */
    #include <stdio.h>

    int main(void) {
    int a; // Definiton
    extern int a; // Deklaration
    int b;
    int c;
    a=5; // Initialisieren
    b=100;
    c=12345;
    printf("Wert von int a=%d ,b=%d, c=%d\n",a,b,c);
    return 0;
    }
    [/cpp]



  • ja,

    aber int a; ist eine deklaration UND definition.

    Deklarieren ist bekanntmachen, definieren die eigentliche Erstellung.



  • [quote="DrGreenthumb"]
    aber int a; ist eine deklaration UND definition.
    [quote]

    gibt es eine Definition, die gleichzeitig keine Deklaration darstellt? Dachte jede Definition ist impiziet auch ne Deklaration - darum hab ich das nicht extra dazu geschrieben



  • nee, nicht das ich wüsste.

    Aber eine Deklaration ist eben nicht automatisch auch eine Definition. Darum muss man schon unterscheiden.



  • Vertexwahn schrieb:

    Erst wenn bei einer Variablen-Deklaration eine Initialisierung vorgenommen wird, handelt es sich um eine Definition.

    Das ist falsch. Eine Variablendeklaration ist entweder eine extern-Deklaration oder eine Definition.

    "C von A bis Z" klingt ehrlich gesagt auch nicht nach einem in solchen Sachen maßgeblichen Werk 😉



  • "C von A bis Z" klingt ehrlich gesagt auch nicht nach einem in solchen Sachen maßgeblichen Werk

    *lol*



  • Bashar schrieb:

    Das ist falsch. Eine Variablendeklaration ist entweder eine extern-Deklaration oder eine Definition.
    ...

    Quelle? 😉



  • Airdamn schrieb:

    Quelle? 😉

    noch einer der jetzt genau wissen will wo das im Ansi C Standard steht... 😉

    in der FAQ steht folgendes:
    Deklaration:
    Ein Programmausdruck der einen Namen in einen Scope ein- bzw.
    wiedereinführt.

    Definition:
    Eine Deklaration die die Details einer Entität bekannt macht oder, im Fall
    von Variablen, die dazu führt, dass Speicher für die Entität reserviert
    wird.

    Eine Deklaration einer Struktur, Aufzählung, Vereinigungstyp (struct, enum,
    union), Funktion wird zu einer Definition, wenn auf die Deklaration ein in
    geschweiften Klammern eingeschlossener Block folgt.
    Variablendeklarationen sind immer auch Definitionen es sei denn, der
    Deklaration ist ein extern vorangestellt.

    Initialisierung:
    Eine Definition mit expliziter Anfangswertzuweisung.


Anmelden zum Antworten