Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Function als define

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.04.2006, 11:02 Uhr
darkstar2005



Ich habe eine Function gefunden die als define implementiert wurde:


Code:
//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?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.04.2006, 11:07 Uhr
stephanw
localhorst


#define add(a,b) ((a)+(b))

Macros und Preprozessor ist im Grunde nur Textersetzung. Wie immer bei Macros gilt, dass man sie so sparsam wie möglich verwenden sollte. Außer möglichen Fehlern und Verwirrung bringen derartige Funktions-"Definitionen" eigentlich nichts, also lieber weglassen und da wo es für Performance wichtig ist, inline-Funktionen verwenden.
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.04.2006, 11:18 Uhr
darkstar2005



danke, meine functionen sind jedoch nicht in eine Klasse deklariert somit kann ich doch kein inline bei der implementierung verwenden. Vom Stil her hast du mit sicherheit recht.

Die add-Function hat auch keinen return-value, somit ist die Frage immer noch nicht beantwortet.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.04.2006, 11:27 Uhr
darkstar2005



doch recht hast du, funzt mit inline auch wenn die Funk nicht member einer Klasse ist
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.04.2006, 11:32 Uhr
stephanw
localhorst


!!! Textersetzung !!!

Wenn Du schreibst:

C++:
#define add(a,b) ((a)+(b))
int g(int x, int y)
{
  int result = add(x,y);
  return result;
}


Dann sieht der Compiler nach dem Preprozessor-Lauf

C++:
int g(int x, int y)
{
  int result = ((x)+(y));
  return result;
}



Ja, add hat keinen return-Wert, weil es keine C oder C++ Funktion ist, sondern einfach ein Stück Text.
--
Reden ist Schweigen und Silber ist Gold.

Dieser Post wurde am 12.04.2006 um 12:09 Uhr von stephanw editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.04.2006, 11:53 Uhr
(un)wissender
Niveauwart


Der Stück "Text" hat aber einen return-Wert, nämlich x+y;
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.04.2006, 12:08 Uhr
stephanw
localhorst




Ich habe versucht, darkstar2005 zu erklären, dass man kein "return" in die Macro-Definition schreiben muss. Das mit dem fehlenden "Return-Wert" war etwas missverständlich ausgedrückt, das stimmt.
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.04.2006, 12:18 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


PS: Inline oder nicht inline liegt ganz alleine im Ermessen des Compilers. Wenn man eine Funktion als inline definiert ist das nur eine empfehlung an den Compiler.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: