Zitat von
s-off:
Zitat von
DGL-luke:
Der Pärprozessor ersetzt __FUNCTION__ durch einen literalen string, der der bezeichnung der aktuellen methode entspricht. D.h. globale Variable "string CurrFunc = "";", in jeder Methode "CurrFunc = __FUNCTION__", bei Exceptions o.ä. CurrFunc ausgeben.
Könnte ich nicht genau so gut in jeder Methode der globalen Variable direkt den Methodennamen zuweisen?
__FUNCTION__ hätte doch nur den Vorteil, dass ich ggf. Änderungen am Methodennamen nicht nachziehen müsste, oder?
Deutlich mehr Arbeit: theoretisches Beispiel:
- 2 Funktionen. Func1 und Func2
- Grundlage: Func1 ruft Func2 auf; globale Variable __FUNCTION__ vorhanden
- Abflauf:
* Func1 angesprungen, setzt globale Variable auf "Func1"
* Func1 ruft Func2 auf
* Func2 angesprungen, setzt globale Variable auf "Func2"
* Func2 kehrt zurück
* Func1 logt __FUNCTION__ wird in der Log zu "Func2"
Ergo: Leider müsstest du dann ganz gewissenhaft nach eigentlich jedem Funktions-/Methodenaufruf die Variable erneut setzen.
Und zur Frage ob Präprozessor oder Compiler: Ich habe auch schon beide angesprochene Möglichkeiten gelesen (Compiler kümmert sich um __FUNCTION__ genauso wie Prärprozessor...) von daher scheint es eher davon abzuhängen wer wie die Compiler/Präprozessor nach eigenem Ermessen gebaut hat.