kleine Code Erklärung und n paar kleine Fragen....



  • hi kann mir einer den folgenden Code erlären...was soll das ??....(ist auß der Datei globals.h aus der id3lib Bibiothk) ....versteh nicht was die defines bezwcken sollen:

    #ifdef __cplusplus
    #  define ID3_ENUM(E)   enum   E
    #  define ID3_STRUCT(S) struct S
    #else
    #  define ID3_ENUM(E)   typedef enum   _ ## E E; enum   _ ## E
    #  define ID3_STRUCT(S) typedef struct _ ## S S; struct _ ## S
    #endif
    

    dann hab ich noch n paar Fragen:

    -Warum soll man ner #define-Konstante lieber ein const typ vorziehen (bzw generell kein Präprozesser #Direktiven benutzen?) ?
    -Bringt ein typedef bspw vor einem struct einen 'Geschwindigkeitszuwachs' oder sonst irgend welche Vorteile^^ ?
    -Macht es einen Unterschied wenn ich UINT (Definition: #define unsigned int UINT) oder unsigned int direkt benutze (als Beispiel) ?
    -Was ist besser: Makros oder Funktionen (und warum!)?
    -Gibt es in C, inline Funktionen ?

    DANKE!!



  • Die Codeunterscheidung für C++ und C wird deshalb benutzt, weil in C struct- und enum-Namen keine Typen sind. In C muss man immer struct Structname schreiben, während in C++ meistens Structname reicht. (Ich bin mir dabei nicht ganz sicher, der C Teil sieht doch sehr suspekt aus. Und da siehst du schon, warum Makros böse sind ;)).

    Warum soll man ner #define-Konstante lieber ein const typ vorziehen (bzw generell kein Präprozesser #Direktiven benutzen?) ?

    Den Präprozessor benutzt man nicht, weil er schlichtweg strunzdumm ist. Er beherrscht nur einfache Textersetzung und einige Abfragen, mehr nicht. Bis auf Umgebungskonstanten und Include-Guards braucht man ihn auch kaum (höchstens noch um gewagte Metaprogrammierungskonstrukte etwas abzukürzen, das ist aber auch heikel).

    Bringt ein typedef bspw vor einem struct einen 'Geschwindigkeitszuwachs' oder sonst irgend welche Vorteile^^ ?

    s.o., Geschwindigkeitszuwachs gibt es mit Sicherheit nicht, da die Typen eh zur Laufzeit weg sind.

    Macht es einen Unterschied wenn ich UINT (Definition: #define unsigned int UINT) oder unsigned int direkt benutze (als Beispiel) ?

    Da hast du direkt einen feinen Fehler am Hals (zumindest, wenn du es so schreibst):

    #define UINT unsigned int;
    // ...
    
    int i = -10;
    
    std::cout << UINT (i) << std::endl;
    

    Das gibt einen Compilerfehler, weil UINT eben zu unsigned int und nicht zu (unsigned int) aufgelöst wird.

    Was ist besser: Makros oder Funktionen (und warum!)?

    Funktionen, weil sie Typprüfung haben. C++ ist schließlich statisch und streng typisiert.

    Gibt es in C, inline Funktionen ?

    AFAIK ab C99.



  • TempVariable schrieb:

    hi kann mir einer den folgenden Code erlären...was soll das ??....(ist auß der Datei globals.h aus der id3lib Bibiothk) ....versteh nicht was die defines bezwcken sollen:

    #ifdef __cplusplus
    #  define ID3_ENUM(E)   enum   E
    #  define ID3_STRUCT(S) struct S
    #else
    #  define ID3_ENUM(E)   typedef enum   _ ## E E; enum   _ ## E
    #  define ID3_STRUCT(S) typedef struct _ ## S S; struct _ ## S
    #endif
    

    In C muss man explizit angeben wenn ein Typ ein enum oder struct ist, aber das kann man mit einem typedef "umgehen".

    dann hab ich noch n paar Fragen:

    TempVariable schrieb:

    -Warum soll man ner #define-Konstante lieber ein const typ vorziehen (bzw generell kein Präprozesser #Direktiven benutzen?) ?

    Der Präprozessor ist fast nur ein Textersetzer, dadurch entstehen oft Fehler im Code.

    TempVariable schrieb:

    -Bringt ein typedef bspw vor einem struct einen 'Geschwindigkeitszuwachs' oder sonst irgend welche Vorteile^^ ?

    Nö, nur wie gesagt in C spart man sich dadurch das Keyword bei jeder Deklaration

    TempVariable schrieb:

    -Macht es einen Unterschied wenn ich UINT (Definition: #define unsigned int UINT) oder unsigned int direkt benutze (als Beispiel) ?

    Siehe oben: Wird einfach im Quellcode erstetzt bevor kompiliert wird.

    TempVariable schrieb:

    -Was ist besser: Makros oder Funktionen (und warum!)?

    Funktionen

    TempVariable schrieb:

    -Gibt es in C, inline Funktionen ?

    Glaube ja, ist aber jeweils nur eine Empfehlung an den Compiler


Anmelden zum Antworten