redesign windows header
-
Martin Richter schrieb:
Dann verwende einfach nicht CreateFile sondern eben was DU willst CreateFileW oder CreateFileA...
mir gehts nicht darum. ob ich nun CreateFile, CreateFileA oder CreateFileW schreib ist mir egal.
aber ich kann z.b. CreateFile selber nicht mehr benutzen. weder als enum, noch als funktionsname.
oftmals muss ich mir dann ewig nen neuen namen fuer ein enum oder einen funktionsnamen ueberlegen
,weil MS ihn schon mit nem define verkorkst hat
-
Meep Meep schrieb:
Martin Richter schrieb:
Dann verwende einfach nicht CreateFile sondern eben was DU willst CreateFileW oder CreateFileA...
mir gehts nicht darum. ob ich nun CreateFile, CreateFileA oder CreateFileW schreib ist mir egal.
aber ich kann z.b. CreateFile selber nicht mehr benutzen. weder als enum, noch als funktionsname.
oftmals muss ich mir dann ewig nen neuen namen fuer ein enum oder einen funktionsnamen ueberlegen
,weil MS ihn schon mit nem define verkorkst hatGanz allgemein gesagt und meine persönliche Meinung: Eigene Funktionen/Klassen/Methoden/Enums/etc. sollte man immer von den systemeigenen Bezeichnern abgrenzen. Hat man eine Funktion, die eine Datei erstellt, sollte man diese nicht CreateFile nennen. Namen wie MyCreateFile oder generell einsatzbezogene Namen (bspw. CreateBackupFile, CreateSaveFile, CreateXMLFile, besser noch backupFile_create, saveFile_create XMLFile_create o.ä.) sind wenigstens anzuraten. In C++ könnte man zwar das Konzept der Polymorphie nutzen, um bereits belegte Funktionsnamen zu "übernehmen", die Wartbarkeit wird dadurch aber ziemlich erschwert. Geht es wirklich nur um einen Bezeichner wie interface würde ich entweder wie oben beschrieben per vorherigem undef das alte Makro löschen oder mein interface konkretisieren. Je nach Art des Interfaces würde ich es auch so benennen, dann weiß ich nächstes Jahr nämlich auch auf Anhieb noch, was das machen soll (z.B. com_interface, usb_interface, canvas_interface, o.ä.)
-
Klar nervt das, und zwar wie auch noch.
class __declspec(dllexport) Foo { //... void LoadImage(); };
Abhängig davon ob
windows.h
inkludiert wurde oder nicht heisst die Funktion jetztLoadImage
oder haltLoadImageW
.
Tolle Wurst.Oder die
GetCurrentTime
Funktion die ich irgendwo definiere heisst auf einmalGetTickCount
.
Sollen wir jetzt jeden Bezeichner mit "my" prefixen? Pfff...
-
Irgendwann wird die Windows API nochmal redesignt werden. Vielleicht
Aber wenigstens Namensraumprefixe hätten die bei MS schon einbauen können, z.B. WINCreateFile oder WINLoadImage.
-
hustbaer schrieb:
Klar nervt das, und zwar wie auch noch.
class __declspec(dllexport) Foo { //... void LoadImage(); };
Abhängig davon ob
windows.h
inkludiert wurde oder nicht heisst die Funktion jetztLoadImage
oder haltLoadImageW
.
Tolle Wurst.Oder die
GetCurrentTime
Funktion die ich irgendwo definiere heisst auf einmalGetTickCount
.
Sollen wir jetzt jeden Bezeichner mit "my" prefixen? Pfff...class __declspec(dllexport) Foo { //... void loadImage(); };
class __declspec(dllexport) Foo { //... void LoadFooImage(); };
#ifdef LoadImage #undef LoadImage #endif class __declspec(dllexport) Foo { //... void LoadImage(); };
4. (gemäß roflos Anmerkung)
#ifdef LoadImage #ifdef UNICODE #define WINLoadImage LoadImageW #else #define WINLoadImage LoadImageA #endif #undef LoadImage #endif class __declspec(dllexport) Foo { //... void LoadImage(); };
-
roflo schrieb:
Irgendwann wird die Windows API nochmal redesignt werden. Vielleicht
Aber wenigstens Namensraumprefixe hätten sie einbauen können, z.B. WINCreateFile oder WINLoadImage.Ist dich schon laaange!
Nur MS fängt Funktionen mit Großbuchstaben an. Wenn man das nachmacht, klar kollidiert es dann.
Das erinnert mich an die Fachleute, die mit Borland-Produkten arbeiten und ihre eigenen Klassen mit T - bzw die mit MS-Produkten arbeiten und ihre eigenen Klassen mit C anfangen lassen. Das ist keine so krass gute Idee.
Also ich hab fast keine Kollisionen, klar, mal max und min, und vielleicht mal das DOMDocument.
-
@Fake oder Echt
Ist mir schon klar.
Nur inwiefern auch nur eine dieser Möglichkeiten akzeptabel ist musst du mir noch erklären.Heisst: ich kann deinen "ist doch OK/alles kein Problem" Standpunkt so überhaupt nicht nachvollziehen.
volkard schrieb:
Nur MS fängt Funktionen mit Großbuchstaben an. Wenn man das nachmacht, klar kollidiert es dann.
*facepalm*
-
hustbaer schrieb:
Heisst: ich kann deinen "ist doch OK/alles kein Problem" Standpunkt so überhaupt nicht nachvollziehen.
Ich sehe es so ... wer sich daran stört, der soll sich eine eigene Lösung einfallen lassen. Schließlich sind die Funktionen der WinAPI Teil der API. Wer C++ nutzt und sich ärgert, dass er als Bezeichner nicht const, static, int, auto, new oder sonstwas wählen kann, der sollte sich einen anderen Weg zur Realisierung seiner Projekte suchen. Wer sich an den (zugegebener Maßen ausgiebig genutzten) Defines der WinAPI stört, sollte sich ein Framework suchen, bei dem das nicht der Fall ist bzw. das alles besser gekapselt ist. Aber auch da gilt es, sich von den internen Bezeichnern abzugrenzen. Wer dazu nicht in der Lage ist und regelmäßig mit bereits bestehenden Bezeichnern aneinandergerät, der sollte sich Gedanken über seinen Programmierstil machen.
Von den Undefs halte ich persönlich auch nichts, es wäre aber eine Mittel zum Zweck. Mehr als die Defines stören mich in der WinAPI die teils haarsträubende Dokumentation inkl. crashender Beispiele aus der MSDN oder un-/ bzw. teildokumentiertes Verhalten.
-
Fake oder Echt schrieb:
hustbaer schrieb:
Heisst: ich kann deinen "ist doch OK/alles kein Problem" Standpunkt so überhaupt nicht nachvollziehen.
Ich sehe es so ... wer sich daran stört, der soll sich eine eigene Lösung einfallen lassen.
Die Sache ist bloss dass es keine wirklich gute Lösung gibt.
Fake oder Echt schrieb:
Schließlich sind die Funktionen der WinAPI Teil der API.
Und?
Fake oder Echt schrieb:
Wer C++ nutzt und sich ärgert, dass er als Bezeichner nicht const, static, int, auto, new oder sonstwas wählen kann, der sollte sich einen anderen Weg zur Realisierung seiner Projekte suchen.
Aha.
Und deswegen macht das Standardkommittee auch mit jedem C++ Standard mehrere Hundert neue Keywords dazu. Und jeder der ne eigene Funktion LoadImage nennen möchte ist unfähig und soll sich nen anderen Job suchen. Klar, OK.Fake oder Echt schrieb:
Wer sich an den (zugegebener Maßen ausgiebig genutzten) Defines der WinAPI stört, sollte sich ein Framework suchen, bei dem das nicht der Fall ist bzw. das alles besser gekapselt ist.
Es gibt auch Leute die solche Frameworks entwickeln. Frag die mal was sie von den #defines in den Windows Headern halten. z.B. die Entwickler von wxWidgets. Oder ... z.B. auch ... mich. Ne, warte, ich bin ja doof.
Fake oder Echt schrieb:
Aber auch da gilt es, sich von den internen Bezeichnern abzugrenzen. Wer dazu nicht in der Lage ist und regelmäßig mit bereits bestehenden Bezeichnern aneinandergerät, der sollte sich Gedanken über seinen Programmierstil machen.
Hast du schonmal was von Namespaces gehört? Weisst du wozu diese u.A. gedacht sind? Und davon wie sich #defines so überhaupt nicht um diese scheren?
Fake oder Echt schrieb:
Von den Undefs halte ich persönlich auch nichts, es wäre aber eine Mittel zum Zweck.
Lustig, denn genau das ist mMn. noch die beste Lösung.
Fake oder Echt schrieb:
Mehr als die Defines stören mich in der WinAPI die teils haarsträubende Dokumentation inkl. crashender Beispiele aus der MSDN oder un-/ bzw. teildokumentiertes Verhalten.
Wer nicht in der Lage ist die MSDN zu lesen bzw. mit (meist aus trivialen Gründen) crashenden Beispielen klarzukommen...
Ne, ich sags jetzt nicht.
-
Ich kann nicht ganz nachvollziehen, warum du dich angegriffen fühlst. Weil ich nicht deine Meinung vertrete? Weil ich sowohl was die Doku als auch die generelle Usability betreffend andere (negative) Erfahrungen gemacht habe?
Wenigstens scheinen wir uns ja bei der Undef-Geschichte insofern einig zu sein, als das das die einzige "Quick"-Lösung ist, auch wenn ich sie "Dirty" finde.
Weitere polemische Rhetorik, die nicht zum Thema gehört und die keine rhetorische/n Frage/n ist/sind, nehme ich gern über PN entgegen.
-
Fake oder Echt schrieb:
Ich kann nicht ganz nachvollziehen, warum du dich angegriffen fühlst. Weil ich nicht deine Meinung vertrete? Weil ich sowohl was die Doku als auch die generelle Usability betreffend andere (negative) Erfahrungen gemacht habe?
Weil du das Problem mit einen total unpassenden Vergleichen ins lächerliche ziehst um dann in Folge Leute die es eben als Problem wahrnehmen für doof bzw. unfähig zu erklären. Kommt zumindest für mich genau so rüber.
Wenn du das Problem nicht hast bzw. es nicht als Problem wahrnimmst, schön für dich. Das heisst aber nicht dass es nicht existiert oder dass jeder doof bzw. unfähig ist der es eben schon als Problem sieht.
-
hustbaer schrieb:
Fake oder Echt schrieb:
Ich kann nicht ganz nachvollziehen, warum du dich angegriffen fühlst. Weil ich nicht deine Meinung vertrete? Weil ich sowohl was die Doku als auch die generelle Usability betreffend andere (negative) Erfahrungen gemacht habe?
Weil du das Problem mit einen total unpassenden Vergleichen ins lächerliche ziehst um dann in Folge Leute die es eben als Problem wahrnehmen für doof bzw. unfähig zu erklären. Kommt zumindest für mich genau so rüber.
Wenn du das Problem nicht hast bzw. es nicht als Problem wahrnimmst, schön für dich. Das heisst aber nicht dass es nicht existiert oder dass jeder doof bzw. unfähig ist der es eben schon als Problem sieht.
Das mit dem doof und unfähig kann ich nicht nachvollziehen, wo man das bei meinen Antworten rauslesen könnte. Aber gut, das war dann das typische Sender-Empfänger-Problem und beim geschriebenen Wort geht das ja meist eh recht schnell mit den Missverständnissen.
Naja. Programmieren ist ja eh ein bisschen wie eine Ehe. Man muss lernen sich zu arrangieren. Das geht mal mehr, mal weniger.