amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > *Nützliche* Macros... [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

26.05.2003, 16:08 Uhr

Solar
Posts: 3680
Nutzer
Sie sind der Horror eines jeden Code-Pflegers, und die allermeisten Style Guides verteufeln sie als Fehlerquelle: C/C++-Macros.

Es gibt aber auch ein paar ganz nützliche, vor allem zum Debuggen.

Ich fang' jetzt mal nicht mit einem Beispiel an, um Eure Kreativität nicht zu bremsen. Es kommen aber welche, versprochen!

Ich bin dabei, eine Sammlung von nützlichen, generischen (d.h. nicht OS- oder API-bezogenen) Macros zu erstellen. Nicht die Dinger zum Herausquetschen von ein paar Taktzyklen, oder die für die Tippfaulen, sondern solche Macros, die sich nicht durch ein kleines bißchen Mehraufwand ersetzen lassen.

Mag jemand sein Lieblingsmacro beisteuern?

[ - Antworten - Zitieren - Direktlink - ]

26.05.2003, 19:49 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Solar:
Sie sind der Horror eines jeden Code-Pflegers, und die allermeisten Style Guides verteufeln sie als Fehlerquelle: C/C++-Macros.

Deshalb programmiere ich hauptsaechlich in einer Sprache, die keine Macros kennt. :D
Zitat:
Es gibt aber auch ein paar ganz nützliche, vor allem zum Debuggen.
Oehm, ASSERT() ?
Zitat:
Ich bin dabei, eine Sammlung von nützlichen, generischen (d.h. nicht OS- oder API-bezogenen) Macros zu erstellen.
Dann hauptsaechlich Console-basiert oder fuer ein (noch zu entwickelndes?) framework?

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

26.05.2003, 22:03 Uhr

mrbbc
Posts: 101
Nutzer
UC_MAIN ;-)

Das steht für ein paar Zeilen...

Aber "Lieblingsmacro" würd' ich's nicht nennen. Wenn alles ordentlich beisammen ist, ist es nur furchtbar praktisch...

--
it obvisiously seems to have been hard to write

[ - Antworten - Zitieren - Direktlink - ]

27.05.2003, 10:33 Uhr

Solar
Posts: 3680
Nutzer
Naa... irgendwie red' ich Chinesisch, scheint's. ;-)

Ich meinte so Sachen wie den "do-while Trick":

code:
#define SOME_MACRO do { ... } while (0)


Auf diese Weise läßt sich ein Macro wie ein "normales" statement verwenden, z.B. nach einem if.

Oder:

code:
#if DEBUG
 #define PRINT_AND_EXECUTE(X) 
     do { 
         cerr << (#X) << "= " << (X) << endl;
     } while (0)
 #endif


Schreibt beim Debug ein Statement sowie dessen Ergebnis nach cerr.

Hat wer weitere solche "Nettigkeiten" im Giftschrank?

[ - Antworten - Zitieren - Direktlink - ]

27.05.2003, 14:13 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Solar:
Naa... irgendwie red' ich Chinesisch, scheint's. ;-)

Ich finde, ich habe schon auf genau auf Deine Intention Bezug genommen.
Zitat:
code:
#define SOME_MACRO do { ... } while (0)

Auf diese Weise läßt sich ein Macro wie ein "normales" statement verwenden, z.B. nach einem if.
Also ist ASSERT() genau das passende Beispiel.
Zitat:
code:
#if DEBUG
 #define PRINT_AND_EXECUTE(X) 
     do { 
         cerr << (#X) << "= " << (X) << endl;
     } while (0)
 #endif


Und das beantwortet auch meine Frage ->Consolebasiertes Debugging.

Na mal gucken, ob ich in meinen alten C-Sourcen was finde...

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

27.05.2003, 16:18 Uhr

Solar
Posts: 3680
Nutzer
Zitat:
Original von Holger:
...also ist ASSERT() genau das passende Beispiel.


Naja. Ich jongliere z.B. auf der Arbeit mit 4-5 verschiedenen #define assert's herum; mich würde halt interessieren, was Dein assert gerade so nützlich macht, und wie Du es definiert hast - nicht nur, daß Du gerne irgendein Macro benutzt, das bei "false" Lärm schlägt... ;-)

[ Dieser Beitrag wurde von Solar am 27.05.2003 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

28.05.2003, 21:20 Uhr

mrbbc
Posts: 101
Nutzer
Zitat:
Original von Solar:
Naa... irgendwie red' ich Chinesisch, scheint's. ;-)

Ich meinte so Sachen wie den "do-while Trick":

code:
#define SOME_MACRO do { ... } while (0)


Auf diese Weise läßt sich ein Macro wie ein "normales" statement verwenden, z.B. nach einem if.


Also ein Deutschauffrischungskurs könnte bei dir nicht schaden ;o)

Es ist mir immer noch nicht ganz klar, was du genau meinst; könntest du deine Frage in C formulieren ;o)

Du meinst mit Makro wohl einen nackigen C-Trick; keine Funktionsaufrufe etc. sondern nur ein semantisches Konstrukt aus C-Schlüsselwörtern... ? Oder zumindest eine selbstgebastelte Konstruktion, etwas, das du so direkt selber verwenden kannst ???

Ansonsten wüsste ich nicht, was dir an den Beispielen mißfallen könnte...

--
it obvisiously seems to have been hard to write

[ - Antworten - Zitieren - Direktlink - ]

28.05.2003, 23:28 Uhr

Mad_Dog
Posts: 1944
Nutzer
Dieses hab ich mir gebasteln...

code:
/*  Makro zur Erzeugung einer Zufallszahl
 *  im Bereich min..max
 */

#define random(min,max) ((rand() % int((max+1.0)-min))+min)

--

http://www.norman-interactive.com

[ - Antworten - Zitieren - Direktlink - ]

28.05.2003, 23:36 Uhr

Mad_Dog
Posts: 1944
Nutzer
Auch sehr nützlich:

code:
/* WORD and LONG SWAP */

#define SWAPW(a) (WORD)(((UWORD)a>>8)+((((UWORD)a&0xff)<<8)))
#define SWAPU(a) (UWORD)(((UWORD)a>>8)+((((UWORD)a&0xff)<<8)))
#define SWAPL(a) (LONG)(((ULONG)a>>24)+(((ULONG)a&0xff0000)>>8)+(((ULONG)a&0xff00)<<8)+ (((ULONG)a&0xff)<<24))

--

http://www.norman-interactive.com

[ Dieser Beitrag wurde von Mad_Dog am 28.05.2003 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

29.05.2003, 08:22 Uhr

Solar
Posts: 3680
Nutzer
Zitat:
Original von mrbbc:
Also ein Deutschauffrischungskurs könnte bei dir nicht schaden ;o)


Que? ;-)

Zitat:
Du meinst mit Makro wohl einen nackigen C-Trick; keine Funktionsaufrufe etc. sondern nur ein semantisches Konstrukt aus C-Schlüsselwörtern... ? Oder zumindest eine selbstgebastelte Konstruktion, etwas, das du so direkt selber verwenden kannst ???

Ich meine mit Makro Dinge, die ich mit einer "normalen" Funktion nicht erreichen kann (da ich Makros eigentlich vermeide wo immer möglich).

Ich habe allerdings schon einige ziemlich starke Sachen gesehen, die mit Makros realisiert wurden (Referenzzähler z.B.), und war neugierig, was andere sich so ausgedacht haben.


[ - Antworten - Zitieren - Direktlink - ]

29.05.2003, 13:48 Uhr

mrbbc
Posts: 101
Nutzer
Zitat:
Original von Solar:
Ich meine mit Makro Dinge, die ich mit einer "normalen" Funktion nicht erreichen kann (da ich Makros eigentlich vermeide wo immer
möglich).


Tja, da gibt's natürlich nicht viel.

Generell gäbe es wenig, was nur mit einem Makro funktioniert, nämlich nur dann, wenn du Präprozessorspezifisches wie __TIME__ __DATE__ __FILE__ oder __LINE__ darin verwendest.

Bei den Optimierungen, die C-Compiler normal bieten machen Makros auch nur selten Sinn...

- wenn man jetzt mal Präprozessordirektiven nicht unreflektiert als "Makro" bezeichnet.

--
it obvisiously seems to have been hard to write

[ - Antworten - Zitieren - Direktlink - ]

30.05.2003, 09:28 Uhr

gni
Posts: 1106
Nutzer
Zitat:
OMad_Dog:
code:
/*  Makro zur Erzeugung einer Zufallszahl
 *  im Bereich min..max
 */
#define random(min,max) ((rand() % int((max+1.0)-min))+min)


Hast Du das aus dem Kopf getippt? int(...) sieht merkwürdig aus.

[ - Antworten - Zitieren - Direktlink - ]

30.05.2003, 16:09 Uhr

Mad_Dog
Posts: 1944
Nutzer
Zitat:
Original von gni:
Zitat:
OMad_Dog:
code:
#define random(min,max) ((rand() % int((max+1.0)-min))+min)


Hast Du das aus dem Kopf getippt? int(...) sieht merkwürdig aus.

Nope! Direkt aus einem meiner Sources gesnapt.
Das ist schon O.k. , denn % bedeutet ja Modulo.
Also brauchen wir eine Ganzzahl. Deshalb der Typecast.



--

http://www.norman-interactive.com

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > *Nützliche* Macros... [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.