none
Literale/Symbolische konstanten RRS feed

  • Frage

  • Hallo zusammen !
    Bin vor kurzem von VB auf C++ umgestiegen, und lerne gerade die Grundlagen.

    Nun bin auf ein kleines problemchen gestoßen, in mein kopf geht nicht rein was eine Literale Konstante, und was ein Symbolische konstante ist.

    Habe mehrere tuts und Themen in MSDN gelesen, auch habe mehr mals in meinem Buch das Thema konstanten durch gelesen nun irgend-wie begreife ich noch immer nicht.

    Kann mir jemand bitte mit eigene Wörter erklären, wenn es geht mit einem kurzen beispiel ?

     

    PS: So wie ich aus dem Buch verstanden habe:

    int MeineVariable = 100; <<<< literale konstante

    const int MeineVariable = 100; <<<< literale konstante

    #devine MeineVariable 100; <<< symbolische konstante

    also wenn ein konstante ohne datentyp definiert z.b wie bei "devine" oder "include" ist eine Symbolische konstante.

     

     

    Danke für die antworten !

     

    Dienstag, 11. Mai 2010 18:40

Antworten

  • Hallo API Checker!

    Vielleicht macht es Dir das klar

    const int		// das ist der Typ
    	iMaxValue	// das ist die symbolische Konstante
    	=		// Zuweisung
    	100		// literale Konstante
    	;		// Abschluß des Statements
    
    Literale Konstanten sind im Prinzip alle Werte, die Du sofort erkennen kannst. ("ABC", 'a', 3.14, 567 etc.)
    Symbolische Konstanten haben einen Wert, aber der ist irgendwo mit einer literalen Konstante, oder einem konstanten Ausdruck, oder einem Wert einer Funktion definiert.

    PS: Ich bin kein C++ Begriffs-Guru undhabe den "Standard" nicht gefressen. Ich kann nur etwas C++ ;)
    PPS: Verzichte auf die persönliche Ansprache und schreibe allgemein, was Du nicht verstehst.

    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Mittwoch, 12. Mai 2010 17:48
    Moderator
  • Danke !

    Jetzt habe ich verstanden !

    • Als Antwort markiert API Checker Sonntag, 16. Mai 2010 20:45
    Sonntag, 16. Mai 2010 20:45

Alle Antworten

  • Hallo API Checker!
    > int MeineVariable = 100; <<<< literale konstante
    >
    > const int MeineVariable = 100; <<<< literale konstante
    >
    > #devine MeineVariable 100; <<< symbolische konstante
    >
    > also wenn ein konstante ohne datentyp definiert z.b wie bei "devine"
    > oder "include" ist eine Symbolische konstante.
    >
    Ich würde bei einem Makro oder #define nicht von einer Konstante reden.
    Ein Define (Makro) wird eben durch den Präprozessor einfach im Code ersetzt.
     
    Man kan jeden Blödsinn und auch schöne Sachen definieren. Deshalb ist
    ein #define nichts anderes als eine Änderung des Codes bevor er
    kompiliert wird.
     
    Beispiel:
     
    #define CONST 1; // Beachte das Semikolon
    static i = CONST // geht natürlich
    void Foo()
    {
    if (i==1) // Compilerfehler.
    ....
    }
     
     
    Konstanten sind also entweder const Variablen (const int i=6;), oder
    eben literale Konstanten durch die Art des Wertes (100, 100.12, 'a',
    "ABCD" etc.). Ein #define (Makro() muss eben keine literale Konstante
    definieren sondern kann eben auch eine Funktion.
     
    #define MINIMUM(a,b) ((a)<(b) ? (a) : (b)) // BTW: Kein guter Weg
     
     
    PS: Und ja ich weiß, dass man solche einen #define nicht benutzten
    sollte wegen seiner Seiteneffekte!
     
     

    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Mittwoch, 12. Mai 2010 07:31
    Moderator
  • Hallo Martin Richter !

    Danke für hilfreiche erklärung, nun verstehe noch immer nicht was eine literale und was eine symbolische konstante, wie kann ich den unterschied erkennen ?

    Das wegen "devine" habe ich verstanden !

     

    PS:

    Sorry für idioten fragen, wenn ich was lerne, bei manchen dingen dauerds bis ich endlich verstanden habe.

    Martin Richter wenn ich dich bitten darf, kannst du mir das noch ein mal ausführlicher erklären.

     

    Danke für die Antwort !

     

     

    Mittwoch, 12. Mai 2010 15:36
  • Hallo API Checker!

    Vielleicht macht es Dir das klar

    const int		// das ist der Typ
    	iMaxValue	// das ist die symbolische Konstante
    	=		// Zuweisung
    	100		// literale Konstante
    	;		// Abschluß des Statements
    
    Literale Konstanten sind im Prinzip alle Werte, die Du sofort erkennen kannst. ("ABC", 'a', 3.14, 567 etc.)
    Symbolische Konstanten haben einen Wert, aber der ist irgendwo mit einer literalen Konstante, oder einem konstanten Ausdruck, oder einem Wert einer Funktion definiert.

    PS: Ich bin kein C++ Begriffs-Guru undhabe den "Standard" nicht gefressen. Ich kann nur etwas C++ ;)
    PPS: Verzichte auf die persönliche Ansprache und schreibe allgemein, was Du nicht verstehst.

    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Mittwoch, 12. Mai 2010 17:48
    Moderator
  • Danke !

    Jetzt habe ich verstanden !

    • Als Antwort markiert API Checker Sonntag, 16. Mai 2010 20:45
    Sonntag, 16. Mai 2010 20:45