DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > *Nützliche* Macros... | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2003-05-26, 16:08 h Solar Posts: 3680 User |
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? [ - Answer - Quote - Direct link - ] |
2003-05-26, 19:49 h Holger Posts: 8116 User |
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. [ - Answer - Quote - Direct link - ] |
2003-05-26, 22:03 h mrbbc Posts: 101 User |
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 [ - Answer - Quote - Direct link - ] |
2003-05-27, 10:33 h Solar Posts: 3680 User |
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? [ - Answer - Quote - Direct link - ] |
2003-05-27, 14:13 h Holger Posts: 8116 User |
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. [ - Answer - Quote - Direct link - ] |
2003-05-27, 16:18 h Solar Posts: 3680 User |
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. ] [ - Answer - Quote - Direct link - ] |
2003-05-28, 21:20 h mrbbc Posts: 101 User |
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 [ - Answer - Quote - Direct link - ] |
2003-05-28, 23:28 h Mad_Dog Posts: 1944 User |
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 [ - Answer - Quote - Direct link - ] |
2003-05-28, 23:36 h Mad_Dog Posts: 1944 User |
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. ] [ - Answer - Quote - Direct link - ] |
2003-05-29, 08:22 h Solar Posts: 3680 User |
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. [ - Answer - Quote - Direct link - ] |
2003-05-29, 13:48 h mrbbc Posts: 101 User |
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 [ - Answer - Quote - Direct link - ] |
2003-05-30, 09:28 h gni Posts: 1106 User |
Zitat:Hast Du das aus dem Kopf getippt? int(...) sieht merkwürdig aus. [ - Answer - Quote - Direct link - ] |
2003-05-30, 16:09 h Mad_Dog Posts: 1944 User |
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 [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > *Nützliche* Macros... | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |