![]() |
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:Deshalb programmiere ich hauptsaechlich in einer Sprache, die keine Macros kennt. ![]() Zitat:Oehm, ASSERT() ? Zitat: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:Ich finde, ich habe schon auf genau auf Deine Intention Bezug genommen. Zitat:Also ist ASSERT() genau das passende Beispiel.code:Auf diese Weise läßt sich ein Macro wie ein "normales" statement verwenden, z.B. nach einem if.#define SOME_MACRO do { ... } while (0) Zitat:Und das beantwortet auch meine Frage ->Consolebasiertes Debugging.code:#if DEBUG #define PRINT_AND_EXECUTE(X) do { cerr << (#X) << "= " << (X) << endl; } while (0) #endif 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: 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: 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: Que? ;-) Zitat: 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: 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: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: 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-2025 by amiga-news.de - alle Rechte vorbehalten. |
![]() |