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


von Icke M. (Firma: my-solution) (hendi)


Lesenswert?

1
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

von FBI (Gast)


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

von Karl H. (kbuchegg)


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'.

von Oliver (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.