Functionen als define



  • Ich habe eine Function gefunden die als define implementiert wurde:

    //N-te Bit in Bitarray setzen
    #define BIT_SET(bit_array, N) \
            ((bit_array)[BIT_ELNUM(N)] |= (BIT_TYPE)1 << BIT_NUM(N))
    

    wo die Zeilenumbrüche mit \ markiert sind.
    kann man so eine Function auch mit einem return value schreiben, und wie sieht sie aus?



  • Der Präprozessor arbeitet (im Gegensatz zum Compiler) zeilenweise - deshalb mußt du mit dem \ kennzeichnen "die Zeile geht noch weiter". Wenn du dieses Makro (das wird übrigens nicht als "Funktion" bezeichnet) umwandeln willst, ist eine Inline-Funktion wohl am günstigsten:

    inline void BIT_SET(BIT_TYPE* array,int N)
    {
      array[BIT_ELNUM(N)] |= 1<<BIT_NUM(N);
    }
    


  • Das ist keine Funktion sondern ein Makro.

    Solche Makros definiert man i.d.R. dann, wenn inline erzwungen sein muss. Allerdings ist das meisten schlechter Stil bzw., wenn es wirklich notwendig ist, sollte man es nicht in eine Funktion zurückkonvertieren. Das Teil in eine Funktion zu übersetzen wird ohne Templates auf Grund der mangelnden Typprüfung bei Makros schwierig.

    Am besten lässt du die Finger von fremden Makros und gewöhnst dir einfach an, sie selber wo es geht zu vermeiden ...

    EDIT: Zu spät ...


Anmelden zum Antworten