Jammer-Thread
- Lord Delvin
- Establishment
- Beiträge: 577
- Registriert: 05.07.2003, 11:17
Re: Jammer-Thread
Gibt es einen Anwendungsfall so Funktionen zu überschreiben? Hätte jetzt erwartet, dass man da keinen VTableeintrag braucht; dann könnte man das auch rausoptimieren.
- Krishty
- Establishment
- Beiträge: 8244
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Dafür musst du feststellen, dass das Objekt auch nicht von außerhalb (durch globale Funktionen) zur Verfügung gestellt wird. Aliasing-Analyse ist in C/C++ berüchtigt schwierig.
Unter Windows kommt erschwerend hinzu, dass virtuelle Funktionen für COM-Objekte genutzt werden und die Interfaces zerstört würden, wenn der Compiler ungenutzte virtuelle Funktionen wegoptimieren würde. Unter Linux hat man dynamisches Linken, das sowas unmöglich macht.
Deshalb habe ich Devirtualisierung und entsprechende Optimierungen bisher nur entweder auf globalen oder lokalen Variablen gesehen (und auch nur, sofern keine externen Funktionsaufrufe in der Nähe waren), aber nie, sobald dynamisch allokierter Speicher ins Spiel kam.
Was die Design-Notwendigkeit betrifft, sowas zu überschreiben: Viele Dateiformate sind Node-basiert. Da werden Konzepte wie Kamera, Meshes, Gruppen gern von einer Node-Basisklasse abgeleitet, weil das Design des Formats das auch stark begünstigt. Dann hat man echte Polymorphie, und wenn jemand read() und write() in die Basisklasse haut, ist das gute OOP und furchtbare Modularisierung.
Unter Windows kommt erschwerend hinzu, dass virtuelle Funktionen für COM-Objekte genutzt werden und die Interfaces zerstört würden, wenn der Compiler ungenutzte virtuelle Funktionen wegoptimieren würde. Unter Linux hat man dynamisches Linken, das sowas unmöglich macht.
Deshalb habe ich Devirtualisierung und entsprechende Optimierungen bisher nur entweder auf globalen oder lokalen Variablen gesehen (und auch nur, sofern keine externen Funktionsaufrufe in der Nähe waren), aber nie, sobald dynamisch allokierter Speicher ins Spiel kam.
Was die Design-Notwendigkeit betrifft, sowas zu überschreiben: Viele Dateiformate sind Node-basiert. Da werden Konzepte wie Kamera, Meshes, Gruppen gern von einer Node-Basisklasse abgeleitet, weil das Design des Formats das auch stark begünstigt. Dann hat man echte Polymorphie, und wenn jemand read() und write() in die Basisklasse haut, ist das gute OOP und furchtbare Modularisierung.
- Lord Delvin
- Establishment
- Beiträge: 577
- Registriert: 05.07.2003, 11:17
Re: Jammer-Thread
Der VTable-Alias-Teil war mir klar; das mit den Nodes nicht, sehe ich aber ein. Dann muss man die wirklich komplett trennen. Der Read/Write für die Gesamtdatei wäre dann aber wieder einfach eine statische Funktion.
-
- Establishment
- Beiträge: 253
- Registriert: 25.08.2019, 05:00
- Alter Benutzername: gdsWizard
- Kontaktdaten:
Re: Jammer-Thread
Mir ist wieder mal eine Festplatte kaputt gegangen. Also habe ich eine Neue bestellt und sie ist heute gekommen. Leider ging diese beim ersten formatieren kaputt und wird jetzt nicht mehr erkannt. Ich weis nicht, aber gefühlt jede neue 3.Platte ist kaputt. Jedenfalls fühlt es sich so an.
Na gut, jetzt darf ich zur Post und muss auch noch den Rückversand bezahlen. Das ist ärgerlich.
Na gut, jetzt darf ich zur Post und muss auch noch den Rückversand bezahlen. Das ist ärgerlich.
Hat den StormWizard 1.0 und 2.0 verbrochen. http://www.mirrorcad.com
- Krishty
- Establishment
- Beiträge: 8244
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Visual Studio Preview kommt nun mit Rechtschreibkorrektur.
Ich wollte mal nicht so alt und verkrustet sein wie sonst und dachte mir: Ich vertippe mich tatsächlich oft und merk’s erst drei Jahre später; könnte endlich mal ein nützliches Feature sein!
Also Preview gesaugt und installiert und erste Datei geöffnet und … alles ist rot.
Der Spell Check kennt kein isn’t. Er erwartet isn't.
Das Apostroph anstelle des Hochkommas wird nicht verstanden.
Fuck.
Aber es gibt einen Workaround! Ihr könnt die Wörter in eine Liste eintragen, damit sie als korrekt erkannt werden. Das geht nicht via GUI, weil der Spell Checker isn’t mit Apostroph nicht als zusammenhängendes Wort erkennt und stattdessen isn whitelisten will.
Microsoft hat Spell Checking seit 1991. Auf dem PC; auf dem Tablet; in der Cloud; via Wörterbuch; via KI. Aber trotzdem muss der User im Jahr 2023 erstmal lernen, was UTF-16 ist und was eine Byte Order Mark.
(Falls ihr findet, ich bin zu pedantisch, Apostroph statt Hochkomma zu verwenden: Jedes Mac-basierte System wandelt das beim Tippen so um, und selbst Microsofts eigene Office-Suite tut das.)
Ich wollte mal nicht so alt und verkrustet sein wie sonst und dachte mir: Ich vertippe mich tatsächlich oft und merk’s erst drei Jahre später; könnte endlich mal ein nützliches Feature sein!
Also Preview gesaugt und installiert und erste Datei geöffnet und … alles ist rot.
Der Spell Check kennt kein isn’t. Er erwartet isn't.
Das Apostroph anstelle des Hochkommas wird nicht verstanden.
Fuck.
Aber es gibt einen Workaround! Ihr könnt die Wörter in eine Liste eintragen, damit sie als korrekt erkannt werden. Das geht nicht via GUI, weil der Spell Checker isn’t mit Apostroph nicht als zusammenhängendes Wort erkennt und stattdessen isn whitelisten will.
HAHAHAHA OMG I CAN’T EVENVisual Studio will consider any word that appears in this exclusion.dic file as a correctly spelled word. Note that the exclusion.dic file must be UTF16 with BOM encoding to work correctly.
Microsoft hat Spell Checking seit 1991. Auf dem PC; auf dem Tablet; in der Cloud; via Wörterbuch; via KI. Aber trotzdem muss der User im Jahr 2023 erstmal lernen, was UTF-16 ist und was eine Byte Order Mark.
(Falls ihr findet, ich bin zu pedantisch, Apostroph statt Hochkomma zu verwenden: Jedes Mac-basierte System wandelt das beim Tippen so um, und selbst Microsofts eigene Office-Suite tut das.)
- Krishty
- Establishment
- Beiträge: 8244
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Autokorrektur durch Snoop Dogg:
![Bild](https://abload.de/img/swizzleridvn.png)
Das erste Problem ist, dass die Korrektur viel zu viel Zustand hat. Bei vielen Dateien scheint sie überhaupt nicht anzuspringen?! Obwohl da eindeutig Fehler sind?!
In anderen Dateien wird ein Wort in dem einen Kommentar als Fehler markiert, im anderen nicht.
Die False-Positive-Rate sank nach den ersten Dateien drastisch. Aber ich vermute, dass einfach die gesamte Meldungsrate sank, inklusive True Positives. Ich kann kein Muster erkennen. Ich dachte erst an KI, aber dann würden nicht ständig printf und const angemeckert?!
Zweiter Kritikpunkt: Die Scroll-Leiste in Visual Studio ist mittlerweile so bunt, dass es keinen Spaß mehr macht:
![Bild](https://abload.de/img/vs-scrollbarrocro.png)
Die roten Stellen sind Fehler (mutmaßlich). Die grünen Stellen sind fehlende Funktionsdefinitionen (mutmaßlich). Die blauen Stellen sind Rechtschreibfehler (mutmaßlich). Die grauen Stellen sind Verbesserungsvorschläge und statische Analyse (meist unbrauchbar). Hätte ich was korrigiert, wären da noch hellblaue Stellen (nicht eingecheckte Änderungen). TURN UP THE NOISE
Alles in allem: 50 Vertipper gefunden in 104.000 Zeilen C++; dabei um die 2000 False Positives mental ignoriert.
Fairerweise könnte man es auf 75 anheben, wenn man Fremdzitate in Kommentaren mitzählt. Aber wenn Raymond Chen treeview statt tree view schreibt, lasse ich das so, weil ich das Zitat sonst nie mehr googeln kann.
Ich lernte:
![Bild](https://abload.de/img/swizzleridvn.png)
Das erste Problem ist, dass die Korrektur viel zu viel Zustand hat. Bei vielen Dateien scheint sie überhaupt nicht anzuspringen?! Obwohl da eindeutig Fehler sind?!
In anderen Dateien wird ein Wort in dem einen Kommentar als Fehler markiert, im anderen nicht.
Die False-Positive-Rate sank nach den ersten Dateien drastisch. Aber ich vermute, dass einfach die gesamte Meldungsrate sank, inklusive True Positives. Ich kann kein Muster erkennen. Ich dachte erst an KI, aber dann würden nicht ständig printf und const angemeckert?!
Zweiter Kritikpunkt: Die Scroll-Leiste in Visual Studio ist mittlerweile so bunt, dass es keinen Spaß mehr macht:
![Bild](https://abload.de/img/vs-scrollbarrocro.png)
Die roten Stellen sind Fehler (mutmaßlich). Die grünen Stellen sind fehlende Funktionsdefinitionen (mutmaßlich). Die blauen Stellen sind Rechtschreibfehler (mutmaßlich). Die grauen Stellen sind Verbesserungsvorschläge und statische Analyse (meist unbrauchbar). Hätte ich was korrigiert, wären da noch hellblaue Stellen (nicht eingecheckte Änderungen). TURN UP THE NOISE
Alles in allem: 50 Vertipper gefunden in 104.000 Zeilen C++; dabei um die 2000 False Positives mental ignoriert.
Fairerweise könnte man es auf 75 anheben, wenn man Fremdzitate in Kommentaren mitzählt. Aber wenn Raymond Chen treeview statt tree view schreibt, lasse ich das so, weil ich das Zitat sonst nie mehr googeln kann.
Ich lernte:
- parantheses -> parentheses
- Greenwhich -> Greenwich
- re-entrancy -> reentrancy
- resetted -> reset
- adressable -> addressable
- boolean -> Boolean
- childs -> children
- generelly -> generally
- occurance -> occurrence
- provoce -> provoke
- spacially -> spatially
- whitespacing -> whitespace
- unknwon
- ignor
- coverting
- manuacturer
- pretection
- …
-
- Moderator
- Beiträge: 2113
- Registriert: 25.02.2009, 13:37
Re: Jammer-Thread
Darum schalte ich das immer ab :-)
Aber noch besser ist das in IntelliJ. Da muss man Spellchecking an verschieden Stellen ausschalten. So 5 oder 6, die ich jedes mal suchen muss.
Und da gibt es keine globalen IDE Einstellungen, sondern man muss das für JEDES VERDAMMTE PROJEKT ALLES NEU MACHEN !!
Ich weiß einfach nicht was die Leute an den Düsen-Hirnies toll finden...
Aber noch besser ist das in IntelliJ. Da muss man Spellchecking an verschieden Stellen ausschalten. So 5 oder 6, die ich jedes mal suchen muss.
Und da gibt es keine globalen IDE Einstellungen, sondern man muss das für JEDES VERDAMMTE PROJEKT ALLES NEU MACHEN !!
Ich weiß einfach nicht was die Leute an den Düsen-Hirnies toll finden...
-
- Moderator
- Beiträge: 2113
- Registriert: 25.02.2009, 13:37
Re: Jammer-Thread
Exakt das ist mir jetzt auch passiert.Mirror hat geschrieben: ↑17.01.2023, 11:50 Mir ist wieder mal eine Festplatte kaputt gegangen. Also habe ich eine Neue bestellt und sie ist heute gekommen. Leider ging diese beim ersten formatieren kaputt und wird jetzt nicht mehr erkannt. Ich weis nicht, aber gefühlt jede neue 3.Platte ist kaputt. Jedenfalls fühlt es sich so an.
Na gut, jetzt darf ich zur Post und muss auch noch den Rückversand bezahlen. Das ist ärgerlich.
Re: Jammer-Thread
Adobe ist ein richtiger Kackladen.
Ich habe ein Video in Premiere, dass ich zuletzt vor einem Jahr bearbeitet habe. Jetzt braucht es eine neue Version. Ich hab ein Jahr lang nichts angefasst und trotzdem ist jetzt alles kaputt. Natürlich hab ich keine Updates installiert (das hat Adobe getan, ohne es mir zu sagen), beim Starten kommt jetzt jedenfalls eine Meldung "You can now upgrade your legacy titles to Essential Graphics. Blabla bla, Yes, No?". Ich hab absolut keine Ahnung, was das legacy titles oder essential graphics sein sollen, es ist mir auch egal, ich will es nicht wissen. Ich will einfach nur an meinem Projekt weiterarbeiten. Und egal was ich anklicke, irgendwas passiert und die Schriftarten sind überall falsch.
Adobe hat scheinbar den digitales Komposthaufen erfunden. Alles was du machst, schimmelt vor sich hin wenn du nicht permanent Arbeit rein investierst. Was für ein Arschloch denkt sich so eine Scheiße aus? Die oberste Priorität ist, dass man scheiß System zu funktionieren hat. Wenn ich Updates brauche installiere ich mir die selber aber ich will verdammt nochmal nicht, dass Dinge einfach kaputt gehen wenn ich sie nichtmal anfasse.
Und hier geht es noch nichteinmal darum, dass Softwareabos verboten gehören, das sind ja quasi explizite Komposthaufen, weil man ständig bezahlen muss, damit man seine Dateien behalten kann. Nein, selbst wenn man bezahlt ist die Software noch so scheiße, dass trotzdem alles kaputt geht. Meine Fresse.
Ich habe ein Video in Premiere, dass ich zuletzt vor einem Jahr bearbeitet habe. Jetzt braucht es eine neue Version. Ich hab ein Jahr lang nichts angefasst und trotzdem ist jetzt alles kaputt. Natürlich hab ich keine Updates installiert (das hat Adobe getan, ohne es mir zu sagen), beim Starten kommt jetzt jedenfalls eine Meldung "You can now upgrade your legacy titles to Essential Graphics. Blabla bla, Yes, No?". Ich hab absolut keine Ahnung, was das legacy titles oder essential graphics sein sollen, es ist mir auch egal, ich will es nicht wissen. Ich will einfach nur an meinem Projekt weiterarbeiten. Und egal was ich anklicke, irgendwas passiert und die Schriftarten sind überall falsch.
Adobe hat scheinbar den digitales Komposthaufen erfunden. Alles was du machst, schimmelt vor sich hin wenn du nicht permanent Arbeit rein investierst. Was für ein Arschloch denkt sich so eine Scheiße aus? Die oberste Priorität ist, dass man scheiß System zu funktionieren hat. Wenn ich Updates brauche installiere ich mir die selber aber ich will verdammt nochmal nicht, dass Dinge einfach kaputt gehen wenn ich sie nichtmal anfasse.
Und hier geht es noch nichteinmal darum, dass Softwareabos verboten gehören, das sind ja quasi explizite Komposthaufen, weil man ständig bezahlen muss, damit man seine Dateien behalten kann. Nein, selbst wenn man bezahlt ist die Software noch so scheiße, dass trotzdem alles kaputt geht. Meine Fresse.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
- Krishty
- Establishment
- Beiträge: 8244
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Ich arbeite an einer C-Codebase, die char standardmäßig als unsigned char behandelt. Hintergrund: C und C++ definieren nicht, ob char eigentlich signed oder unsigned ist – schlimmer noch, char ist ein dritter Typ und jeder Compiler kann sich quasi aussuchen, ob negative Zahlen erlaubt sind oder nicht.
Heute hat sich weitgehend durchgesetzt, char als signed zu behandeln, aber jeder Compiler hat Flags, das umzustellen. Meine Codebase hier erfordert unsigned. Ich möchte die Flags loswerden und mein Ziel ist portabler Code, indem unsigned und signed explizit angegeben werden, wenn Code darauf aufbaut. (Besser noch via int8_t und uint8_t, aber I digress.)
Ich schalte also das Flag aus, und die Menge an Laufzeitfehlern ist überwältigend.
Offensichtliche Fehler sind langweilig: Dateidaten als char lesen und zu int casten macht plötzlich negative Zahlen statt große. Klar.
Der hier war besser: Out-of-Bounds-Zugriff bei char red = palette[colorindex].red. colorindex ist als int deklariert und der Debugger zeigt 203. palette ist 256 Einträge groß. Huh?!
In C ist es erlaubt, globale Variablen mehrfach mit unterschiedlichen Typen zu deklarieren. Der Linker muss dann die größere Repräsentation wählen. Eine Quelldatei hat colorindex als char deklariert; eine andere als int und noch eine als unsigned char. Der Compiler hat die Zuweisungen von 1 B auf 4 B sign-extended, aber der Debugger kam nicht damit klar und zeigte Müll an. Tatsächlich griff der Code dann auf Element [-75] zu, was natürlich falsch war. Dieses Linker-Verhalten ist wohl borderline-legal, aber richtig heimtückisch (und für C++ abgeschafft worden). Ich musste alle Deklarationen der Variable finden und gleichziehen.
Dann liefen im Programm Dinge rückwärts ab statt vorwärts. Wtf?! Turns out: Es gab ein Flag isRunning. Benutzt wurde es als movement = speed * isRunning, weil es ja 1 ist, wenn alles laufen soll, und 0 wenn gestoppt.
Dummerweise war es deklariert als char isRunning : 1, also als einzelnes Bit in einem Bitfeld. Für vorzeichenbehaftete Typen sind die beiden Werte, die sich in einem Bit speichern lassen, aber nicht 0 und 1 (das wäre unsigned) – sondern 0 und -1! Darum lief jetzt alles rückwärts.
Ich weiß nicht, ob ich das hinkriegen werde. Wenn man eine große Codebase einmal mit Annahme über den Wertebereich von char geschrieben hat, ist das unglaublich schwer wieder zu ändern. Fuck. Mir bleibt wohl nichts anderes, als nach char zu greppen und jede Verwendung einzeln zu beurteilen :(
Heute hat sich weitgehend durchgesetzt, char als signed zu behandeln, aber jeder Compiler hat Flags, das umzustellen. Meine Codebase hier erfordert unsigned. Ich möchte die Flags loswerden und mein Ziel ist portabler Code, indem unsigned und signed explizit angegeben werden, wenn Code darauf aufbaut. (Besser noch via int8_t und uint8_t, aber I digress.)
Ich schalte also das Flag aus, und die Menge an Laufzeitfehlern ist überwältigend.
Offensichtliche Fehler sind langweilig: Dateidaten als char lesen und zu int casten macht plötzlich negative Zahlen statt große. Klar.
Der hier war besser: Out-of-Bounds-Zugriff bei char red = palette[colorindex].red. colorindex ist als int deklariert und der Debugger zeigt 203. palette ist 256 Einträge groß. Huh?!
In C ist es erlaubt, globale Variablen mehrfach mit unterschiedlichen Typen zu deklarieren. Der Linker muss dann die größere Repräsentation wählen. Eine Quelldatei hat colorindex als char deklariert; eine andere als int und noch eine als unsigned char. Der Compiler hat die Zuweisungen von 1 B auf 4 B sign-extended, aber der Debugger kam nicht damit klar und zeigte Müll an. Tatsächlich griff der Code dann auf Element [-75] zu, was natürlich falsch war. Dieses Linker-Verhalten ist wohl borderline-legal, aber richtig heimtückisch (und für C++ abgeschafft worden). Ich musste alle Deklarationen der Variable finden und gleichziehen.
Dann liefen im Programm Dinge rückwärts ab statt vorwärts. Wtf?! Turns out: Es gab ein Flag isRunning. Benutzt wurde es als movement = speed * isRunning, weil es ja 1 ist, wenn alles laufen soll, und 0 wenn gestoppt.
Dummerweise war es deklariert als char isRunning : 1, also als einzelnes Bit in einem Bitfeld. Für vorzeichenbehaftete Typen sind die beiden Werte, die sich in einem Bit speichern lassen, aber nicht 0 und 1 (das wäre unsigned) – sondern 0 und -1! Darum lief jetzt alles rückwärts.
Ich weiß nicht, ob ich das hinkriegen werde. Wenn man eine große Codebase einmal mit Annahme über den Wertebereich von char geschrieben hat, ist das unglaublich schwer wieder zu ändern. Fuck. Mir bleibt wohl nichts anderes, als nach char zu greppen und jede Verwendung einzeln zu beurteilen :(
- starcow
- Establishment
- Beiträge: 527
- Registriert: 23.04.2003, 17:42
- Echter Name: Mischa Schaub
- Kontaktdaten:
Re: Jammer-Thread
Interessant! Das int und signed int identisch sind (entsprechend auch short, long, long long) - jedoch char und signed char formal verschieden: davon hatte ich gelesen. Eindrücklich zu lesen, was das in der Praxis für Probleme mit sich bringen kann!
LG, starcow
0 und -1? Wie denn das? Wird denn das MSB modifiziert? Dann wäre es ja -128 und 0, nein?Krishty hat geschrieben: ↑23.01.2023, 19:27 ... Dummerweise war es deklariert als char isRunning : 1, also als einzelnes Bit in einem Bitfeld. Für vorzeichenbehaftete Typen sind die beiden Werte, die sich in einem Bit speichern lassen, aber nicht 0 und 1 (das wäre unsigned) – sondern 0 und -1! Darum lief jetzt alles rückwärts.
LG, starcow
- xq
- Establishment
- Beiträge: 1581
- Registriert: 07.10.2012, 14:56
- Alter Benutzername: MasterQ32
- Echter Name: Felix Queißner
- Wohnort: Stuttgart & Region
- Kontaktdaten:
Re: Jammer-Thread
isRunning ist ja ein 1-bit signed integer, meist im Zweierkomplement. Das mapped ja die unsigned ints von 0 … (2^n)-1 um auf -(2^(n-1)) ... (2^(n-1)-1) (also bei 8 bit von 0...255 auf -128 bis 127).0 und -1? Wie denn das? Wird denn das MSB modifiziert? Dann wäre es ja -128 und 0, nein?
Bei einem Bit hast du nur den Wertebereich 0...1, welcher dann auf -1...0 umgemapped wird, da das höchstwertigste Bit ja immer noch das sign-bit ist, muss also der Wert, der dabei raus kommt, negativ sein.
Ist etwas verwirrend, ergibt aber Sinn. Jemand anders kann das sicher auch besser erklären
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Programmiert viel in
Zig
und nervt Leute damit.
Programmiert viel in
- dot
- Establishment
- Beiträge: 1734
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Jammer-Thread
ka welche Version von C das sein soll, aber das hör ich zum ersten Mal. Generell gilt
Typen unterschiedlicher Größe sind schonmal fix nicht compatbile types…ISO/IEC 9899:2023 6.2.7/2 hat geschrieben:All declarations that refer to the same object or function shall have compatible type; otherwise, the
behavior is undefined.
- Krishty
- Establishment
- Beiträge: 8244
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Microsoft so:dot hat geschrieben: ↑24.01.2023, 03:25ka welche Version von C das sein soll, aber das hör ich zum ersten Mal. Generell gilt
Typen unterschiedlicher Größe sind schonmal fix nicht compatbile types…ISO/IEC 9899:2023 6.2.7/2 hat geschrieben:All declarations that refer to the same object or function shall have compatible type; otherwise, the
behavior is undefined.
Wo habe ich was missverstanden? Müssen vielleicht die Declarations gleich sein, aber die Definitions dürfen sich unterscheiden?https://learn.microsoft.com/en-us/cpp/sanitizers/error-global-buffer-overflow hat geschrieben:Global variables in C are treated much differently than in C++. This difference is because of the complex rules for linking C.
In C, a global variable can be declared in several source files, and each definition can have different types. The compiler can't see all the possible definitions at once, but the linker can. For C, the linker defaults to selecting the largest-sized variable out of all the different declarations.
In C++, a global is allocated by the compiler. There can only be one definition, so the size of each definition is known at compile time.
-
- Establishment
- Beiträge: 470
- Registriert: 01.03.2009, 19:09
Re: Jammer-Thread
Das ist eine interessante Diskussion und eigentlich schon fast einen eigenen Thread wert..
Der Jammer Thread hier ist echt eine Goldgrube, schade dass hier die Sachen dann so schwer wiederzufinden sind...
Der Jammer Thread hier ist echt eine Goldgrube, schade dass hier die Sachen dann so schwer wiederzufinden sind...
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
- Krishty
- Establishment
- Beiträge: 8244
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Genau das. Gegner bleiben stehen; Waffen feuern nicht; Multiplayer ist tot. Nichts funktioniert.
char kommt 12.000 Mal im Quelltext vor, und das kriege ich niemals persönlich geprüft. Ich habe versucht, alles pauschal durch uchar zu ersetzen und dann nur die Compiler-Fehlermeldungen (signed uchar etc.) abzuackern, aber selbst das ist einfach zu viel. Cs laxes Typsystem hilft gar nicht, weil es einfach ständig still castet.
Ich kann auch nicht Datei für Datei umstellen, denn die Deklarationen sind total über alle Dateien verteilt und #include zieht dauernd unverwandte Deklarationen mit char rein.
Ich schmeiß hin. Benutzt bitte bloß nie diese Compiler-Schalter! Wenn ihr Code mit char schreibt, der Arithmetik statt Textverarbeitung macht, nutzt bitte von vornherein uint8_t und int8_t, damit ihr nie in dieser Hölle landet.
Besonders tut mir weh, dass ein Viertel der chars für Boolesche Flags verwendet wird. Ich hätte 3.000 Probleme weniger, wenn C in den 90ern ein ordentliches bool eingeführt hätte.
Zeigt übrigens auch gut, warum C++ im C-Stil sehr viel besser ist als C: Strikte Typprüfung; bool; One Definition Rule. Damit sähe die Codebase direkt radikal anders aus.
Das führt mich zu einer anderen Idee: Alles C als C++ kompilieren. Dann kriege ich zumindest die faulen Casts usw. mit. Aus Gründen, die ich nicht verstehe, bekomme ich die weder mit /Za noch mit /std:c99 /permissive-, wobei letzteres komplett nutzlos ist.
- Krishty
- Establishment
- Beiträge: 8244
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Diese Antwort geht darauf ein: https://stackoverflow.com/questions/143 ... 87#1433387 (such nach COMMON)Krishty hat geschrieben: ↑24.01.2023, 07:37Microsoft so:dot hat geschrieben: ↑24.01.2023, 03:25ka welche Version von C das sein soll, aber das hör ich zum ersten Mal. Generell gilt
Typen unterschiedlicher Größe sind schonmal fix nicht compatbile types…ISO/IEC 9899:2023 6.2.7/2 hat geschrieben:All declarations that refer to the same object or function shall have compatible type; otherwise, the
behavior is undefined.Wo habe ich was missverstanden? Müssen vielleicht die Declarations gleich sein, aber die Definitions dürfen sich unterscheiden?https://learn.microsoft.com/en-us/cpp/sanitizers/error-global-buffer-overflow hat geschrieben:Global variables in C are treated much differently than in C++. This difference is because of the complex rules for linking C.
In C, a global variable can be declared in several source files, and each definition can have different types. The compiler can't see all the possible definitions at once, but the linker can. For C, the linker defaults to selecting the largest-sized variable out of all the different declarations.
In C++, a global is allocated by the compiler. There can only be one definition, so the size of each definition is known at compile time.
Es ist wohl eine Erweiterung zwecks FORTRAN-Kompatibilität, durch die sowohl MSVC als auch GCC erlauben, Variablen unterschiedlich zu definieren und dann im Linker die größte Definition wählen. GCC hat das in den Standard-Optionen mittlerweile abgeschaltet; MSVC offensichtlich nicht.
- dot
- Establishment
- Beiträge: 1734
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Jammer-Thread
lol. cursed²Krishty hat geschrieben: ↑24.01.2023, 10:29Diese Antwort geht darauf ein: https://stackoverflow.com/questions/143 ... 87#1433387 (such nach COMMON)
Es ist wohl eine Erweiterung zwecks FORTRAN-Kompatibilität, durch die sowohl MSVC als auch GCC erlauben, Variablen unterschiedlich zu definieren und dann im Linker die größte Definition wählen. GCC hat das in den Standard-Optionen mittlerweile abgeschaltet; MSVC offensichtlich nicht.
- starcow
- Establishment
- Beiträge: 527
- Registriert: 23.04.2003, 17:42
- Echter Name: Mischa Schaub
- Kontaktdaten:
Re: Jammer-Thread
Das macht Sinn. Danke für die Erklärung!xq hat geschrieben: ↑24.01.2023, 00:11isRunning ist ja ein 1-bit signed integer, meist im Zweierkomplement. Das mapped ja die unsigned ints von 0 … (2^n)-1 um auf -(2^(n-1)) ... (2^(n-1)-1) (also bei 8 bit von 0...255 auf -128 bis 127).0 und -1? Wie denn das? Wird denn das MSB modifiziert? Dann wäre es ja -128 und 0, nein?
Bei einem Bit hast du nur den Wertebereich 0...1, welcher dann auf -1...0 umgemapped wird, da das höchstwertigste Bit ja immer noch das sign-bit ist, muss also der Wert, der dabei raus kommt, negativ sein.
Ist etwas verwirrend, ergibt aber Sinn. Jemand anders kann das sicher auch besser erklären
- Krishty
- Establishment
- Beiträge: 8244
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Vielleicht sollte ich doch nochmal Visual Studio Code probieren?https://devblogs.microsoft.com/cppblog/brace-pair-colorization-and-more-in-visual-studio/ hat geschrieben:The Spell Checker will be on by default
Re: Jammer-Thread
Hab mein Spiel nach, uhm, Monaten nochmal neu kompilliert. Hatte zwischendrin was am Framework gemacht und jetzt geht natürlich erstmal wieder gar nichts. Nach dem Start ist der Spieler irgendwo im Nirgendwo, die Physik-Engine teleportiert den auf irgendwelche 8-stellige Zahlen und alles Bones stecken ineinander. Hab dann erstmal eine alter Version vom Framework ausgecheckt, die wollte aber auch nicht. Shader machen auch Probleme. Möglicherweise hab ich nicht immer alles richtig eingecheckt? Jedenfalls darf ich mich jetzt erst wieder einen halben Tag hinsetzen und rausfinden, was kaputt ist (letztes mal war es GLM die das StandardßInitialisierungsverhalten geändert hatten, und ich hatte zwischenzeitlich die neue Version installiert...), was irgendwie die Motivation wieder neu anzufangen natürlich dämpft. Ugh...
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
- Krishty
- Establishment
- Beiträge: 8244
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Versionsverwaltung? git bisect
- Lord Delvin
- Establishment
- Beiträge: 577
- Registriert: 05.07.2003, 11:17
Re: Jammer-Thread
Oder wenn es nicht an dir liegt, einen Jenkins unter anderem User installieren und deine Builds da aufbewahren. Spart mir ziemlich viel Zeit; wenn du's nicht sowieso schon hast würde ich in sowas Zeit investieren.
-
- Establishment
- Beiträge: 470
- Registriert: 01.03.2009, 19:09
Re: Jammer-Thread
Clang-Tidy....
Eigentlich ja ein tolles Tool, aber eigenen Checker dafür zu bauen ist relativ grausam...
Auch weil die Dokumentation dafür eher sehr rudimentär ist...
Eigentlich ja ein tolles Tool, aber eigenen Checker dafür zu bauen ist relativ grausam...
Auch weil die Dokumentation dafür eher sehr rudimentär ist...
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
- Krishty
- Establishment
- Beiträge: 8244
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Nvidia Issue 5443: When Discord is open in the background, graphics card memory clocks will not reach full speeds
Bonus:
Bonus:
Hut ab vor dem, der das diagnostizieren konnte!After a recent update to the Discord app
Re: Jammer-Thread
Mein Desktop Ordner heißt jetzt "C:\Users\Jonathan\Creative Cloud Files\Desktop"...
Adobe produziert echt die schlimmste Maleware die ich in den letzten 20 Jahren auf meinem PC hatte. Es hat sich so richtig tief eingenistet, im Explorer wird es noch als "> Jonathan > Desktop" angezeigt, und wenn man dann darauf klickt um den vollen Pfad zu sehen merkt man, dass der Desktop selber jetzt nur noch ein Unterordner ist.
Und es ist ja nicht so, dass man mal irgendwie gefragt würde oder irgendwas einstellen könnte oder das jetzt nicht im Hintergrund 20 Auto-Updater laufen, die es immer wieder direkt "reparieren" sobald man versucht das zu ändern. Da kann man locker 2 Tage Vollzeit investieren bevor man es schafft, dass der Rechner wieder einigermaßen normal läuft.
Sorry, aber das geht so doch nicht. Ich meine, Adobe ist halt Markführer, da kommt man in vielen Situationen einfach nicht drum herum, aber das hier ist doch purer Machtmissbrauch. Sollte man dringend mal regulieren. Die machten das ja schon seit Jahren, z.B. dass Acrobat immer als Standard-PDF Viewer neu registriert wurde.
Adobe produziert echt die schlimmste Maleware die ich in den letzten 20 Jahren auf meinem PC hatte. Es hat sich so richtig tief eingenistet, im Explorer wird es noch als "> Jonathan > Desktop" angezeigt, und wenn man dann darauf klickt um den vollen Pfad zu sehen merkt man, dass der Desktop selber jetzt nur noch ein Unterordner ist.
Und es ist ja nicht so, dass man mal irgendwie gefragt würde oder irgendwas einstellen könnte oder das jetzt nicht im Hintergrund 20 Auto-Updater laufen, die es immer wieder direkt "reparieren" sobald man versucht das zu ändern. Da kann man locker 2 Tage Vollzeit investieren bevor man es schafft, dass der Rechner wieder einigermaßen normal läuft.
Sorry, aber das geht so doch nicht. Ich meine, Adobe ist halt Markführer, da kommt man in vielen Situationen einfach nicht drum herum, aber das hier ist doch purer Machtmissbrauch. Sollte man dringend mal regulieren. Die machten das ja schon seit Jahren, z.B. dass Acrobat immer als Standard-PDF Viewer neu registriert wurde.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
-
- Moderator
- Beiträge: 2113
- Registriert: 25.02.2009, 13:37
Re: Jammer-Thread
Kurz für die Statistik:Alexander Kornrumpf hat geschrieben: ↑20.01.2023, 18:29Exakt das ist mir jetzt auch passiert.Mirror hat geschrieben: ↑17.01.2023, 11:50 Mir ist wieder mal eine Festplatte kaputt gegangen. Also habe ich eine Neue bestellt und sie ist heute gekommen. Leider ging diese beim ersten formatieren kaputt und wird jetzt nicht mehr erkannt. Ich weis nicht, aber gefühlt jede neue 3.Platte ist kaputt. Jedenfalls fühlt es sich so an.
Na gut, jetzt darf ich zur Post und muss auch noch den Rückversand bezahlen. Das ist ärgerlich.
Kaputte Platte war eine Seagate. Lebensdauer 2-3 Jahre. Ersatzplatte Versuch 1 war von Toshiba, Lebensdauer 20 Minuten. Ersatzplatte Versuch 2 ist eine wesentlich teurere Western Digital. Hat jetzt schon länger gehalten, als die Toshiba.
-
- Establishment
- Beiträge: 253
- Registriert: 25.08.2019, 05:00
- Alter Benutzername: gdsWizard
- Kontaktdaten:
Re: Jammer-Thread
Ich habe gestern mit meiner ehemaligen Psychologin korrespondiert. Sie hat mir geschrieben, das ich vermutlich an einer fehlbehandelten PTSD mit Dissoziation leide. Leider sei diese falsch diagnostiziert worden. Das Problem sei, das wenn ein traumatisierter Neuroleptika nimmt, dann entwickelt er durch diese eine Psychose. Das könnte stimmen, denn die Angstzustände habe ich durch Dogmatil bekommen, das ist mir verschrieben worden, weil die Oberärztin bei mir eine Intelligenzminderung diagnostiziert hatte. Seit dem leide ich immer wieder darunter und brauch seitdem täglich Atosil.
Aber die Oberärztin will mir immer mein Atosil wegnehmen, weil es nicht gegen Psychosen helfe.
Auch die Geräusche die ich jetzt immer höre kamen durch Abilify, durch das ich außerdem wieder psychisch krank wurde und regelmäßig in der Dialyse vorstellig werden muss. Auch brauche ich seitdem was gegen zu hohen Puls und zu hohen Blutdruck. Außerdem hat sie mir geschrieben das mein Auslöser für diese in meinen Erlebnissen in der Schule liege, ich hatte deshalb auch nicht studiert, obwohl ich ein sehr guter Schüler war.
Ich habe mich immer gewundert weil man wie ein Idiot behandelt wird, wenn man psychisch krank ist, so als würde man nichts raffen, das war bei mir aber nie der Fall. Ich bin schon immer selber wenn ich psychische Probleme hatte zum Arzt gegangen, auch beim 1.Mal, was ja auch untypisch für einen Schizophrenen ist. Im Fernsehen heißt es immer das die das selber nicht raffen.
Aber die Oberärztin will mir immer mein Atosil wegnehmen, weil es nicht gegen Psychosen helfe.
Auch die Geräusche die ich jetzt immer höre kamen durch Abilify, durch das ich außerdem wieder psychisch krank wurde und regelmäßig in der Dialyse vorstellig werden muss. Auch brauche ich seitdem was gegen zu hohen Puls und zu hohen Blutdruck. Außerdem hat sie mir geschrieben das mein Auslöser für diese in meinen Erlebnissen in der Schule liege, ich hatte deshalb auch nicht studiert, obwohl ich ein sehr guter Schüler war.
Ich habe mich immer gewundert weil man wie ein Idiot behandelt wird, wenn man psychisch krank ist, so als würde man nichts raffen, das war bei mir aber nie der Fall. Ich bin schon immer selber wenn ich psychische Probleme hatte zum Arzt gegangen, auch beim 1.Mal, was ja auch untypisch für einen Schizophrenen ist. Im Fernsehen heißt es immer das die das selber nicht raffen.
Hat den StormWizard 1.0 und 2.0 verbrochen. http://www.mirrorcad.com
- Lord Delvin
- Establishment
- Beiträge: 577
- Registriert: 05.07.2003, 11:17
Re: Jammer-Thread
Ich würde keinen medizinischen Informationen aus dem Fernsehen trauen. Es gibt kein Grund anzunehmen, dass die besser sind als die zu Informatik & Co wo ich beurteilen kann wie mies das ist. Es würde mich auch wundern, wenn dir hier jemand ernsthaft helfen kann, weil es einfach nicht der passende Fachbereich ist.