Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Frage zu Codestück

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 ] [ 2 ] > 3 <
020
24.08.2007, 15:49 Uhr
Pablo
Supertux
(Operator)


Ok, das sind gute Argumente. Also kann man sagen, dass man nur Makros benutzen sollte, wenn man genau weiß, was sie tun und wie?

Ich schreibe gerade einen Mikrokernel für die ARM Architektur und da bin ich mehr als dankbar, dass ich Makros benutzen kann, denn sonst wäre manchnes gar nicht so realisierbar, wie ich es so möchte.

Wobei ich selten Makros schreib, die Funktionen ersetzen sollten (wie min/max Makro) sondern eher Wrapper für bestimmte Structs-Elemente oder so.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 24.08.2007 um 15:50 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
021
24.08.2007, 16:05 Uhr
Kest
saint


Hi!

Wäre es nicht sauberer Inline-Funktionen zu benutzen?
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
022
24.08.2007, 16:31 Uhr
Tommix




Zitat von Kest:
Hi!

Wäre es nicht sauberer Inline-Funktionen zu benutzen?

Ja, eben.
Das fiese an dem von mir in's Gespräch geworfenen max-Makro ist nur, daß es in den Windows-Headern halt so drin steht. Dem unbedarften Benutzer ist vermutlich gar nicht bewußt, daß ein Makro ist und keine Funktion, zumal man sich hier ausnahmsweise mal nicht an die sonst übliche Konvention, Makros komplett in Großbuchstaben zu schreiben, gehalten hat.
Allerdings läuft der Thread rasant aus dem Topic mittlerweile.

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
023
24.08.2007, 17:15 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von Pablo:
Ok, das sind gute Argumente. Also kann man sagen, dass man nur Makros benutzen sollte, wenn man genau weiß, was sie tun und wie?

Ich schreibe gerade einen Mikrokernel für die ARM Architektur und da bin ich mehr als dankbar, dass ich Makros benutzen kann, denn sonst wäre manchnes gar nicht so realisierbar, wie ich es so möchte.

Wobei ich selten Makros schreib, die Funktionen ersetzen sollten (wie min/max Makro) sondern eher Wrapper für bestimmte Structs-Elemente oder so.



Diese Macro-Diskusssion wird manchmal ein wenig fundamental geführt. Ich habe mir auch angewöhnt, Macros in C möglichst nicht für Funktionen zu verwenden, sondern für die von Dir skizzierten Fälle. Auch hier wird man von hardcore Leuten hören, daß Macros Pfui sind und höchstens für Include-Guards taugen.

Ich denke jedoch, daß Macros eine Menge Tiparbeit sparen. Und ein Verzicht auf Macros dann eben häufig dazu führt, daß man die Stellen, welche man sonst mit Macros abfackelt nach dem Paste&Copy Prinzip im Quelltext ohne nachzudenken vervielfältigt. Und Paste&Copy hat eben die unangenehme Eigenschaft, daß damit auch Fehler vervielfältigt werden können.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
024
24.08.2007, 17:56 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Könnt ihr mal bitte ein Beispiel posten?
Weil bei "Tipparbeit sparen" denke ich immer an jemanden aus einem anderen Forum der dauernd sowas alla

C++:
#define MP(p, v)        (p.m_seMembers.v)
#define MWP(p, v)        (p.m_seMembers.m_seWordMembers.v)
#define M(v)        (this -> m_seMembers.v)
#define _MW(v)        (this -> m_seMembers.m_seWordMembers.v)
#define MW(v)        (this -> v)


und ähnliches wie z.B. Funktionsaufrufe so verkürzt hat weil er sich auch schreibarbeit sparen wollte.
Ich persönlich finde sowas absolut grausam *schauder*

Dieser Post wurde am 24.08.2007 um 17:56 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
025
24.08.2007, 22:12 Uhr
Pablo
Supertux
(Operator)



Zitat von Kest:
Hi!

Wäre es nicht sauberer Inline-Funktionen zu benutzen?


Ja und nein. inline ist erst in C99 definiert und wenn mein Kernel mit einem älteren GCC kompiliert wird, muss es auch laufen. Außerdem benutze ich Makros dafür, um C++-Templates ein wenig nachzubauen (Stacks, Queues, usw) und da kann man nicht auf Markos verzichten. (@Guybrush) würde ich auf Makros verzichten, müsste ich für alle Datentypen, die ich benötige, eine ganze Priority-Queue schreiben müssen.


Zitat:

Diese Macro-Diskusssion wird manchmal ein wenig fundamental geführt.



Genau darauf wollte ich hinaus
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 24.08.2007 um 22:13 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
026
24.08.2007, 23:16 Uhr
ao

(Operator)


Leute, die fit genug sind, um einen Multitasking-Kern zu schreiben, sind meist auch in der Lage, mit Makros richtig umzugehen.

Interessant finde ich übrigens die Erfahrung, dass ich jetzt, nachdem ich viel Zeit mit C++ und C# verbracht habe, auch ganz anders in C programmiere als früher.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
027
26.08.2007, 22:53 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von Guybrush Threepwood:
Könnt ihr mal bitte ein Beispiel posten?



Naja, zB sowas:


C++:
#define TRY struct exception* c__ex = NULL;
#define CATCH  c__ex_handler:  if (c__ex)
#define THROW(e) { c__ex = e; goto c__ex_handler; }
#define FINALLY



Diese Macros finde ich sogar ziemlich sinnvoll, weil sie unmittelbar die Intention klar machen und wenn man das so emulierte Exception handling verfeinern möchte, kann man es tun, jedenfalls leicher als ohne Macros.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
028
26.08.2007, 23:38 Uhr
Pablo
Supertux
(Operator)


Krass virtual ... try/catch in C ... das hätte ich nicht für möglich gehalten.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
029
27.08.2007, 01:40 Uhr
virtual
Sexiest Bit alive
(Operator)


@Pablo

Naja, ist halt diversen Einschränkungen unterworfen; mir sind Sprachen, die das builtin haben, deutlich lieber.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] > 3 <     [ 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: