präprozessr anweisung vs typedef vs const



  • µngbd schrieb:

    supertux schrieb:

    Bie solchen numerischen Sachen wird in C den typedef Weg bevorzugt. Wobei ich heute eher enums verwende:

    enum somename {
      PI=3.14159265
    };
    

    Geht enum auch mit floats?

    Natürlich nicht.



  • supertux schrieb:

    enum somename {
      PI=3.14159265
    };
    
    enum somename 
    {
      PI=3.14159265,
      PI_PLUS_ONE,    // 4.14159265
    };
    

    ^^ *fg*
    🙂



  • µngbd schrieb:

    supertux schrieb:

    Bie solchen numerischen Sachen wird in C den typedef Weg bevorzugt. Wobei ich heute eher enums verwende:

    enum somename {
      PI=3.14159265
    };
    

    Geht enum auch mit floats? Das wäre eigentlich eine feine Sache.
    🙂

    Ich hab ehrlich gesagt noch nie ausprobiert und hab gar nicht dran gedacht, als ich den Beitrag schrieb. 🙄

    µngbd schrieb:

    supertux schrieb:

    der Präprozessor denkt nicht, er kann gar nicht schlau sein, denn er macht eine 1:1 Textersetzung vor dem tatsächlichen Kompilervorgang.

    Aber ein wenig schlauer hätte man den schon machen können. ZB um jede Ersetzung Klammern machen, wenn man dadurch die Syntax nicht bricht.
    🙂

    aber dann bist du der Schlaue, der den Präpro. überlistest.



  • Ich bin für diese Lösung:

    enum {pi = 3, e = 3};
    

    Macht alles viel einfacher.



  • also mal ehrlich konstante werte gehören einfach in ein #define und nicht in ne variable oder sonstwas da braucht man sich doch nicht darüber unterhalten man kann sich evtl. darüber unterhalten ob pi/2 in ne variable kommt oder nicht normal übernimmt das aber auch der compiler...

    meiner meinung sind enums und unions unnötig hab sie auch noch nie verwendet und hab das auch nicht vor



  • Bashar schrieb:

    µngbd schrieb:

    Geht enum auch mit floats?

    Natürlich nicht.

    Warum eigentlich nicht?

    noobLolo schrieb:

    man kann sich evtl. darüber unterhalten ob pi/2 in ne variable kommt oder nicht

    Nö, dafür gibt's M_PI_2.
    🙂



  • supertux schrieb:

    Ich hab ehrlich gesagt noch nie ausprobiert und hab gar nicht dran gedacht, als ich den Beitrag schrieb. 🙄

    Wieso schreibst du dann, dass du das selbst so machst? Du simulierst dadurch eine fundierte Aussage.



  • µngbd schrieb:

    Bashar schrieb:

    µngbd schrieb:

    Geht enum auch mit floats?

    Natürlich nicht.

    Warum eigentlich nicht?

    Weil enums durch ganze Zahlen repräsentiert werden. Syntaktisch mag das so gehen, aber da wird dann 3.14159 in 3 konvertiert.



  • Hmm, also ich habe unions und enums schon gebraucht.
    Und ich halte wenig davon Variablen per defines zu definieren, ich halte const-Variablen da für sinnvoller, weil es so typabhängig ist, aber das kann natürlich auch ein Nachteil sein. Aber wahrscheinlich ist es egal.



  • nwp2 schrieb:

    Hmm, also ich habe unions und enums schon gebraucht.
    Und ich halte wenig davon Variablen per defines zu definieren, ich halte const-Variablen da für sinnvoller, weil es so typabhängig ist, aber das kann natürlich auch ein Nachteil sein. Aber wahrscheinlich ist es egal.

    Es geht ja auch nicht um Variable, sondern um echte, echt konstante Werte. Die sind in den Standardlibs nunmal als defines abgelegt.
    const- Vars machen eigentlich nur Sinn, wenn Du dem Compiler sagen kannst, daß er sie im ROM ablegen soll (sonst kopiert der Startupcode sie ins RAM um) und Du die paar gesparten Bytes wirklich brauchst. Das dödelige extern ist der Preis dafür, den man dann zu zahlen hat.

    Aber darf ja jeder programmieren, wie er will ... 😃



  • nwp2 schrieb:

    Und ich halte wenig davon Variablen per defines zu definieren

    das geht ja auch nicht. aber konstanten kannste mit #define anlegen, die sind dann wirklich so richtig konstant.

    nwp2 schrieb:

    ...ich halte const-Variablen da für sinnvoller

    ich z.b. verwende 'const' total selten, fast nie.
    🙂



  • µngbd schrieb:

    Nö, dafür gibt's M_PI_2

    ich denke ich sollte mal die math.h genauer unter die lupe nehmen 🙂



  • Bashar schrieb:

    [quote="µngbd"Warum eigentlich nicht?

    Weil enums durch ganze Zahlen repräsentiert werden. Syntaktisch mag das so gehen, aber da wird dann 3.14159 in 3 konvertiert.[/quote]
    Gibt's dafür einen profanen Grund, oder ist das einfach so, weil es einfach so ist?

    nwp2 schrieb:

    Und ich halte wenig davon Variablen per defines zu definieren, ich halte const-Variablen da für sinnvoller, weil es so typabhängig ist, aber das kann natürlich auch ein Nachteil sein.

    Deswegen gibt es ja die Suffizes für Zahlen-Literale. Im schlimmsten Fall könnte man auch einen cast mit in das Makro nehmen.

    Ich finde enum's ganz nett, wenn man sich damit ein paar "Symbole" anlegen kann, ohne die Werte selbst explizit zu machen. Wenn ich aber ein langes 'enum' voll mit expliziten Zahlen sehe, verstehe ich den Vorteil nicht mehr so recht.
    🙂



  • Diese ganzen #defines aus math.h, M_PI usw., sind leider nicht im Standard.



  • µngbd schrieb:

    Bashar schrieb:

    µngbd schrieb:

    Warum eigentlich nicht?

    Weil enums durch ganze Zahlen repräsentiert werden. Syntaktisch mag das so gehen, aber da wird dann 3.14159 in 3 konvertiert.

    Gibt's dafür einen profanen Grund, oder ist das einfach so, weil es einfach so ist?

    enums sind Aufzählungstypen, eigentlich macht man damit sowas wie MONTAG, DIENSTAG, MITTWOCH usw. Damit beliebige Konstanten zu definieren war nie der Sinn, das macht man nur, weil #define wohl neuerdings pöhse ist und weil consts external linkage haben.



  • Bashar schrieb:

    Diese ganzen #defines aus math.h, M_PI usw., sind leider nicht im Standard.

    Oje, das stimmt. Ich hab mich schon wieder mal auf die manpages verlassen. Man muss sich das abgewöhnen.
    🙂



  • Bashar schrieb:

    weil #define wohl neuerdings pöhse ist und weil consts external linkage haben

    also da enzieht sich mir der sinn ne konstante die schön in ein register passt sonstwo her zu holen ab in ein #define damit 🙂



  • noobLolo schrieb:

    Bashar schrieb:

    weil #define wohl neuerdings pöhse ist und weil consts external linkage haben

    also da enzieht sich mir der sinn ne konstante die schön in ein register passt sonstwo her zu holen ab in ein #define damit

    dass 'const' #define vorzuziehen ist, wird in C++-kreisen gepredigt. naja, alles was aus der ecke kommt, ist sowieso mit vorsicht zu geniessen.
    🙂



  • ;fricky schrieb:

    dass 'const' #define vorzuziehen ist, wird in C++-kreisen gepredigt. naja, alles was aus der ecke kommt, ist sowieso mit vorsicht zu geniessen.

    ja bei kleinen dingen fängts an:)
    nicht das hier ein c vs. c++ off-topic thread entsteht 🤡



  • µngbd schrieb:

    Bashar schrieb:

    Diese ganzen #defines aus math.h, M_PI usw., sind leider nicht im Standard.

    Oje, das stimmt. Ich hab mich schon wieder mal auf die manpages verlassen. Man muss sich das abgewöhnen.
    🙂

    Wieso? Wenn's im Header nicht drinsteht, merkste das, wenn der Präppi oder Compiler meckert. Dann schreibst Du's einfach in math.h mit rein, fertig.


Anmelden zum Antworten