mikrocontroller.net

Forum: Compiler & IDEs Kann mir jemand diese Zeile erklären?


Autor: Icke Muster (Firma: my-solution) (hendi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SOAP_FMAC1 int SOAP_FMAC2 soap_puthttphdr(struct soap *soap, int status, size_t count)
Ich versuche C mehr und mehr zu durchdringen, aber solche Zeilen, die 
ich bis jetzt nirgendwo gesehen hab und die auch (meiner Meinung nach) 
erfahrenere Informatiker nicht deuten konnten, geben mir Rätsel auf. Das 
Fragment ist ein Funktionskopf der gSOAP Library von Robert van Engelen. 
Schönes Teil im Übrigen, ich glaube die Leute, die es gebaut haben, 
haben es definitiv raus. Doch das am Rande, ich versteh die Zeile nicht. 
Welche Funktion haben in dieser Funktion die (scheinbar) Makros 
SOAP_FMAC1 und SOAP_FMAC2? Ist das so zu interpretieren, dass SOAP_FMAC1 
ein Rückgabewert ist, wo z.B. die Größe des Int über ein Makro 
festgelegt ist? Und kann dann SOAP_FMAC2 ein Zeiger auf eine Funktion 
sein? Können Makros überhaupt auf Funktionen zeigen, eigentlich nicht, 
oder? Ich hoffe, dass jemand von euch schon mal so ein Konstrukt, vll. 
dasselbe, gesehen hat. Danke schon mal für die Aufklärung. Ansonsten 
kann ich die gsoap Library nur empfehlen, ist wahrscheinlich auch eine 
gute Lösung für Mikrocontroller, die HTTP-Verarbeitung brauchen und ein 
bissel Speicherplatz mitbringen, so 150k FLash und ca. 20k Ram.

Danke für Antworten(wie eigentlich immer ;-)).

Ciao,

Hendi

Autor: FBI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

die dienen dazu, Anpassungen an unterschiedlich Betriebssyteme, 
Compiler, etc. vornehmen zu können. Wenn man z.B. diese Lib mittels MSVC 
in eine Windows-DLL verpacken will, dann müssen SOAP_FMAC1 und 
SOAP_FMAC3 entsprechend definiert werden (siehe Docu). Ein weiterer Fall 
ist, wenn die Lib z.B. unter Symbian verwendet werden soll. In den 
meisten Fällen dürften sie aber als leer definiert sein und vom 
Preprozessor einfach entfernt werden. Zum Verständnis der entsprechenden 
Codezeilen solltest Du also erstmal einfach dasselbe tun und sie Dir 
einfach wegdenken.
Ansonsten halt einfach mal suchen wo und wie sie definiert sind (z.B. 
stdsoap2.h).

CU

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Icke Muster wrote:
> festgelegt ist? Und kann dann SOAP_FMAC2 ein Zeiger auf eine Funktion
> sein? Können Makros überhaupt auf Funktionen zeigen, eigentlich nicht,
> oder? Ich hoffe, dass jemand von euch schon mal so ein Konstrukt, vll.

Hier dürfte wieder mal das Misverständnis vorliegen, dass Makros
irgendwelche Voodoo Magie machen. Das genau Gegenteil ist der
Fall.
Ein Präprozessor Makro ist einfach nur eine Anweisung an den
Präprozessor eine Textersetzung vorzunehmen. Nicht mehr. Da
steckt kein Geheimnis dahinter.

So wie du in deinem Texteditor die Funktion 'Suchen und Ersetzen'
hast, hast du dasselbe Feature mit dem Präprozessor: Bevor der
Compiler diese Zeile überhaupt zu Gesicht bekommt, ersetzt der
Präprozessor die Textbausteine SOAP_FMAC1 und SOAP_FMAC2 durch
irgendwelche andere Textbausteine. Und das ist dann auch schon
alles.
Wenn du also wissen willst, was da raus kommt, dann musst du
die Makros raussuchen und den Text ermitteln der an diesen
Stellen eingesetzt wird. Erst dann kann man darüber diskutieren
und im Compiler Handbuch nachsehen, was sich daraus ergibt.

> die auch (meiner Meinung nach) erfahrenere Informatiker nicht
> deuten konnten

Dann sind sie nicht 'erfahren'.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> die auch (meiner Meinung nach) erfahrenere Informatiker nicht
>> deuten konnten

>Dann sind sie nicht 'erfahren'.

Dann waren es keine erfahrenen Programmierer, was bei Informatikern auch 
gar nicht so ungewöhnlich ist. Die meisten wissen übers Programmieren 
soviel, wie ein Architekt übers Mauern.

Oliver

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.