Brauche Hilfe
-
Ich dachte ich verstehe jedenfalls etwas die C Syntax aber jetzt habe ich in einem fremden Code ein paar Funktionen gefunden, die ich nicht verstehe. Hier mal zwei Beispiele
#define LOADIP(_a_,_b_)\ {\ char __tmp[20];\ if (GetPrivateProfileInt (_a_, "VALID", 0, client->inipath))\ {\ GetPrivateProfileString (_a_,\ "VALUE",\ "",\ __tmp,\ sizeof(__tmp),\ client->inipath);\ client->settings._b_=inet_addr(__tmp);\ }\ else\ client->settings._b_=INVALID_SETTING;\ } #define SENDCS(_a_,_b_)\ {\ if (client->_a_[0]!=INVALID_SETTING)\ TLV_SendString(client->socket,_b_,client->_a_);\ }
Kann mir das mal jemand erklären? Wieso beginnen die mit #define? Wieso haben die Parameterlisten keine Typangaben? Was soll der Backslash am Ende jeder Zeile?
Danke im Voraus
-
Hi,
hierbei handelt sich um eine präprocessor anweisung. _a_ und _b_ sind nur platzhalter für die eigentlichen parameter. Der typ ist egal weil hier der compiler noch garnicht seine finger drinnen hat. Der präprozessor ersetzt nur text und macht keine typprüfungen. Die '\' sind teil der syntax und bieten die möglichkeit zeilenumbrüche in solche anweisung zu bauen. Anders wäre das nicht möglich bzw. würde vom präpro angemeckert werden.
Das ergebniss eines aufrufs der form
void some_func(){ int i=3; //tu was LOAD_IP(foo,bar) //tu noch was printf("%d\n",i); }
wäre nach dem preprocessing:
void some_func(){ int i=3; //tu was { char __tmp[20]; if (GetPrivateProfileInt (foo, "VALID", 0, client->inipath)) { GetPrivateProfileString (foo, "VALUE", "", __tmp, sizeof(__tmp), client->inipath); client->settings.bar=inet_addr(__tmp); } else client->settings.bar=INVALID_SETTING; } //tu noch was printf("%d\n",i); }
_a_ wird immer durch foo ersetzt und _b_ immer durch bar, und zwar BEVOR die eigentlich compile-phase losgeht.