Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Zitat von »"VuuRWerK"«
Der Threadersteller hat 2 Lösungsvorschläge erhalten und auf Deine optimierte Version warte ich immernoch
Doch doch, es bringt schon was, am Rande darauf hinzuweisen, dass die Portabilität nicht unter allen Umständen gewährleistet ist.Zitat von »"VuuRWerK"«
Ok, wir kommen hier vom hundertsten ins tausende das bringt doch nix.
Die üblichen Probleme mit dem Präprozessor, der nur dumme Textersetzungen macht. Zum Beispiel hast du dein c nicht geklammert, was bei gewissen Operatoren zu Problemen bezüglich Priorität führen kann. Das ist hier vielleicht weniger relevant, da diese Operatoren nicht oft in Zusammenhang mit Zeichen verwendet werden, aber grundsätzlich sollte man das bedenken. Gleichzeitig sollte man auch wissen, dass man für das Makro bereits zwei Klammerebenen benötigt, nur um die Operatorpriorität sicherzustellen, während in der Funktion keine einzige Klammer nötig ist.Zitat von »"VuuRWerK"«
Wieso ist für den Test eine Funktion geeigneter? Den Test hätte ich wahrscheinlich sowieso gleich als Ausdruck ins if geschrieben und habe die #define variante wieder nur der lesbarkeithalber benutzt. Dennoch würde mich interessieren wieso eine Funktion besser gewesen wäre?
C-/C++-Quelltext |
|
1 2 |
char ch = 'y'; int b = is_alpha(++ch); |
Zitat von »"VuuRWerK"«
Hast Du vielleicht ein Beispiel auf welcher Plattform wo ASCII anders umgesetzt ist als bekannt?
Nein. Zwischen 2 und 4 Mal. :pZitat von »"VuuRWerK"«
(y wird 2mal hochgezählt).
Was denkst du, wieso inline nicht mehr viele Auswirkungen hat? Richtig, weil Compiler solche Dinge oft besser optimieren können als Programmierer. Und wenn du bei einem guten Compiler eine so kleine Funktion schreibst und sogar noch das inline-Schlüsselwort als Empfehlung hinsetzt, ist es sehr wahrscheinlich, dass die Funktion auch tatsächlich inline wird. Dafür lohnen sich die Vorteile allemal.Zitat von »"VuuRWerK"«
Die andere Sache ist: Mir ist zu Ohren gekommen dass das verwenden von inline heutzutage keine/kaum noch Auswirkungen hat. Mehr Erfolg würde wohl an dieser Stelle forceinline bringen jedoch ist dies nicht standardisiert.
Zitat
You cannot force the compiler to inline a particular function, even with the __forceinline keyword.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
inline bool specialCharacter(char c) { return c == 'ä' || c == 'Ä' || c == 'ö' || c == 'Ö' || c == 'ü' || c == 'Ü' || c == 'ß' || c == ' '; } char* clearString(char* str) { for (char* i = str,* c = str; specialCharacter(*c) ? *c : *i++ = *c; ++c); return str; } int main(int argc, const char* argv[]) { char string[] = "abcdefg öäüaddßfafä"; clearString(string); return 0; } |
Zitat von »"BlackSnake"«
forceinline muss auch nicht gewünschten ziel führen:
Zitat
You cannot force the compiler to inline a particular function, even with the __forceinline keyword.
Werbeanzeige