'#define Name x' oder 'const Typ Name=x;'



  • Ich glaub nicht, dass eher define statt const benutzt wird. Const bietet ja klare Vorteile, bei der Fehlervorbeugung.



  • Raptor: Hmm, schöner Text, aber mit #define hat der nichts zu tun.



  • Defines gehoeren aber definitiv zur modularen Programmiertechnik.



  • Nö, da musst du irgendwas missverstanden haben. Das eine hat mit dem anderen überhaupt nichts zu tun.



  • Ich wäre definitiv an einer Erklärung interessiert, was #define mit modularer Programmierung zu tun hat! define benutze ich eigentlich meistens für irgendwelche Debugzwecke.



  • Defines gehoeren aber definitiv zur modularen Programmiertechnik.

    Wieso? Weil das irgendwer in Wikipedia eingetragen hat?



  • Zitat:
    Defines gehoeren aber definitiv zur modularen Programmiertechnik.

    Wieso? Weil das irgendwie in Wikipedia eingetragen hat?

    Nein nicht deswegen (und wenn, dann wuerde ich denen eher glauben als dir).

    Aber darum geht es mir jetzt ueberhaupt nicht.
    Warum werden defines bei Konstanten ueberhaupt genutzt und nicht nur 'const Typ Name;'



  • ich find zwar #defines net so toll, aber ich denke, ihr vorteil ist, dass halt einiges während des compilieren gemacht wird, vielleicht wirkts sich positiv auf die programmgeschwindigkeit oder den speicherbedarf aus.



  • Nein nicht deswegen (und wenn, dann wuerde ich denen eher glauben als dir).

    Super Bemerkung 👍. Du scheinst ja offenbar zu wissen, was ein Wiki ist.....



  • In Wikipedia kann doch AFAIK jeder was eintragen, oder? Aber da das dort überhaupt nicht gesagt wird, ist die Diskussion rein hypothetisch 🙂

    Raptor: Ursprünglich war #define die einzige Möglichkeit, Konstanten zu definieren. In C++ wurde jedoch später const eingeführt, was gegenüber #define-Konstanten eine Menge Vorteile hat. Wenn du also irgendwo noch eine #define-Konstante siehst, kann das daran liegen, dass der Quelltext zu alt ist, oder dass er in C ist, oder dass der Programmierer zu alt (im Kopf) ist.

    Wenn eine const-Konstante mit einem Ausdruck, der zur Compilezeit konstant ist, initialisiert wird (also z.b. const int a = 10; ), dann kann der Compiler den Wert genauso überall dort direkt einsetzen, wo a vorkommt, so dass es nicht zu Geschwindigkeitsnachteilen kommt.



  • Da der Artikel weder define noch include noch sonst irgendeine Verbindung zu C bzw. C++ herstellt, möchte ich auch gerne wissen wie du das schaffst.

    otze schrieb:

    ich find zwar #defines net so toll, aber ich denke, ihr vorteil ist, dass halt einiges während des compilieren gemacht wird, vielleicht wirkts sich positiv auf die programmgeschwindigkeit oder den speicherbedarf aus.

    *räusper*
    (ein #define FOO 10 ist allerdings niemals nie einem const int vorzuziehen..)



  • @Raptor:
    danke, ich denke aber dass ich weiss was Modulare Programmierung ist.
    Nur schuldet du uns immr noch ein Argument warum #define etwas damit zu tun hat. Ich kann aus deinem Text das leider nicht rauslesen.

    Wobei #include erstmal nichts mit modulen zu tun hat...

    otze schrieb:

    ich find zwar #defines net so toll, aber ich denke, ihr vorteil ist, dass halt einiges während des compilieren gemacht wird, vielleicht wirkts sich positiv auf die programmgeschwindigkeit oder den speicherbedarf aus.

    Ne, #define hat keine Vorteile gegenueber const



  • Warum wurde in C "früher" immer #define X 2 statt const int X = 2; verwendet?
    Genaugenommen ist letztere sogar besser, da nicht an jeder Stelle nen Temp
    Objekt erzeugt werden muss.
    Hab ich ehrlichgesagt noch nie verstanden, wieso die das immer verwenden



  • Na gut.
    Ich habe es aus einem Buch von Andre LaMothe.
    Aus diesem Buch habe ich auchdas hier
    Und allmaehlich mache ich mich auch Gedanken, was er eigentlich in seinen Buechern schreibt.
    Mir kam es naemlich etwas spanisch vor, dass seiner Meinung nach die besten Programme keine Klassen habe und (nun zum Thema) man

    die modularen Programmiertechniken wie includes defines und typedefs

    nutzen solle.
    Also Leute, falls ich jetzt ein bisschen Muell erzaehlt habe, dann nur, weil ich es nicht besser wusste, dass was in diesem Buch stand zu verstehen und anscheinend
    seht ihr es aehnlich, dass ich,( der sich auf Herrn LaMothe bezog), also Herr LaMothe sich in dem Buch entweder vertan hat, oder nicht mehr auf der Hoehe der Zeit ist.

    MfG

    Raptor



  • SirLant schrieb:

    Warum wurde in C "früher" immer #define X 2 statt const int X = 2; verwendet?
    Genaugenommen ist letztere sogar besser, da nicht an jeder Stelle nen Temp
    Objekt erzeugt werden muss.
    Hab ich ehrlichgesagt noch nie verstanden, wieso die das immer verwenden

    Weil es const int in C erst seit C99 gibt afaik. (Falls das Müll ist, dann schlagt mich bitte.)



  • DaRealC_Coder schrieb:

    SirLant schrieb:

    Warum wurde in C "früher" immer #define X 2 statt const int X = 2; verwendet?
    Genaugenommen ist letztere sogar besser, da nicht an jeder Stelle nen Temp
    Objekt erzeugt werden muss.
    Hab ich ehrlichgesagt noch nie verstanden, wieso die das immer verwenden

    Weil es const int in C erst seit C99 gibt afaik. (Falls das Müll ist, dann schlagt mich bitte.)

    Nö. const gab es auch in C89. Es hat nur nicht die Bedeutung des C++ const. In C89 ist eine als const-deklarierte Variable insbesondere keine Compile-Zeit-Konstante. Sprich:

    const int n = 22;
    int arr[n];
    

    ist *kein* gültiges C89, wohl aber gültiges C++.



  • hier ist so ein beispiel

    #include <errno.h>
    #include <stdlib.h>
    #include <string.h>
    
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>    /* sockaddr_in structure */
    #include <netdb.h>          /* /etc/hosts table entries */
    
    #define TCP_PORT 25
    #define MAX_ZEICHEN 4096
    

    WARUM nimm man hier defines fuer den TCP_PORT.
    Weil es C ist warscheinlich.



  • Raptor schrieb:

    WARUM nimm man hier defines fuer den TCP_PORT.
    Weil es C ist warscheinlich.

    Ja, das ist C - ist ja auch unschwer zu erkennen, oder?



  • Ja, das ist C - ist ja auch unschwer zu erkennen, oder?

    Nein, sag bloss.
    In der OOP bzw. C++ wuerde man es dann mit

    const int tcp_port=25;
    const int max_zeichen=4096
    

    machen, wenn ich jetzt aus diesem Thread etwas gelernt habe.



  • Raptor schrieb:

    Nein, sag bloss.

    Ja. zB an dem struct vor sockaddr_in oder daran, dass nirgendwo ein const vorkommt.

    In der OOP bzw. C++ wuerde man es dann mit

    const int tcp_port=25;
    const int max_zeichen=4096
    

    machen, wenn ich jetzt aus diesem Thread etwas gelernt habe.

    hat nix mit OOP zu tun, aber in C++ wuerde man es so machen.


Anmelden zum Antworten