Das hat doch überhaupt nichts mit Frauen, Kleidung oder Feminismus zu tun!

Es gibt immer Leute, die über andere lästern, aus welchen - an den Haaren herangezogenen - Gründen auch immer. Schiefe Zähne, Akne, Brillenträger, zu hohe / tiefe Stimme, Dialekt / Akzent, nicht-mainstream Geschmack im Bezug auf Klamotten, Literatur, Nahrungsmittel, Mobiliar, Verträumtheit, zu ruhig / zu aufgedreht, ... es gibt NICHTS worüber sich andere Leute nicht das Maul zerreißen würden.

Da steht man drüber und ignoriert es. Punkt. Es sei denn, man hat zu viel lange Weile und kein Hobby, in das man seine Zeit lieber investiert, als sich Gedanken um anderer Leute Gedanken zu machen. :)

...zur Antwort
Dark Theme

Wenn man lange am Rechner sitzt, sind dunkle Themes DEUTLICH angenehmer für die Augen, als eine gleißend weiße Fläche.

Ich nutze sogar Browser-Addons dafür, weil z. B. GF mit schwarzem Hintergrund und gelber Schrift wesentlich angenehmer ist, als ein hellblau / hellgrau / weißer Hintergrund.

Auch bei Terminalemulatoren, Dateimanagern, oder allgemein Betriebssystem-Themes nutze ich ausschließlich dunkle.

...zur Antwort

Ich traue Ghidra sowas von überhaupt nicht, dass ich es höchstens auf einem extra Rechner ohne Netzwerk ausprobieren würde.

Momentan reichen mir radare2, IDA, uvm. völlig aus und ich sehe kein Killerfeature, welches mir Ghidra schmackhaft machen würde.

Der "Fehler" in der Config-Datei, den du ansprichst, und der auf Befehle aus der ganzen Welt horcht, ist mit Sicherheit kein Fehler. Jeder, der schon mal Software geschrieben hat, setzt für lauschende Prozesse niemals einen Platzhalter ein. Das ist ein absolutes NoGo, und ich traue den Entwicklern von Ghidra wesentlich mehr Sachverstand zu, als so einen Anfängerfehler zu machen. Allein bei diesem Punkt bin ich mir zu 100% sicher, dass da Absicht hinter stecken muss ... anders ist das nicht zu erklären.

Das ist ungefähr so, als würden Java-Entwickler statt ArrayList die Vector-Klasse nutzen, C++ler malloc() statt den new-Operator bevorzugen oder Linux-Admins sich eine VM mit Windows installieren, um Zugriff auf die "Eingabeaufforderung" zu haben, weil sie damit besser klar kommen, als mit der Bash.

Diese Beispiele nur mal zum einordnen, damit du ein Gefühl dafür bekommst, WIE krass das "Sternchen" als Platzhalter bei einer lauschenden Verbindung eigentlich ist!

Fazit: Ich mache beruflich jeden Tag reverse Engineering und nutze so ziemlich alle gängigen Tools regelmäßig. Aber auf einem "normalen" Arbeitsrechner, der auch noch am Netz hängt, würde ich Ghidra nie und nimmer freiwillig installieren.

Ghidra scheint zwar durchaus richtig gut zu sein, aber das sind andere auch und solange die anderen noch mithalten können, verzichte ich dankend auf Ghidra. :)

...zur Antwort

Das geht mit C grundsätzlich nicht, weil C nichts von Kodierungen weiß.

Unter Windows funktioniert dein obiges Beispiel in der ollen "Eingabeaufforderung", weil diese auf eine vorsintflutliche Zeichenkodierung setzt.

Bei Macs nutzt der Terminal standardmäßig UTF-8, so wie bei jedem anderen modernen Betriebssystem auch.

Deshalb ersetze deine Umlaute einfach anhand folgender Tabelle:

"ä" -> "\xC3\xA4"
"ö" -> "\xC3\xB6"
"ü" -> "\xC3\xBC"
"Ä" -> "\xC3\x84"
"Ö" -> "\xC3\x96"
"Ü" -> "\xC3\x9C"
"ß" -> "\xC3\x9F"

Wenn du also "gelöste Fäkaliensoße" schreiben willst, machst du das so:

puts("gel\xC3\xB6ste F\xC3\xA4kalienso\xC3\x9Fe");

Aber dein Programm ist dadurch nicht mehr portabel! Wie gesagt, C kennt keine Umlaute, sondern nur Bytes! Was ein Terminalemulator letztendlich damit macht, ist nicht Sache von C an sich.

Viel Spaß! :)

...zur Antwort

Deine Frage ist nicht zu beantworten, da sie von zu vielen unbekannten Faktoren abhängt.

Eine leere Schleife wird in den meisten Fällen einfach wegoptimiert werden, und nicht ein einziges Mal (!) durchlaufen, egal wie breit der Typ der Zählvariablen ist.

Außerdem hängt es von dem ab, was innerhalb der for-Schleife getan wird. Und dann auch noch von Compilerversion, Optimierungseinstellungen, usw.

Und natürlich hängt das von der CPU-Architektur, der Taktzahl, dem Scheduling des Betriebssystems, uvm. ab.

Fazit: Deine Frage ist unmöglich zu beantworten!

...zur Antwort
Das Unternehmen bescheid geben auch wenn ich kein Cent bekomme

Ich habe früher noch Sicherheitslücken an Unternehmen gemeldet, aber tue das inzwischen nicht mehr, da einem nicht nur Undankbarkeit, sondern auch gerne mal mit Anzeige oder Schlimmerem gedroht wird.

Eine Sicherheitslücke gegen etwas Geld zu melden würde ich mir an deiner Stelle tunlichst verkneifen, denn mir hat mal ein Anwalt gesagt, dass so etwas gerne als Erpressung ausgelegt wird und du dafür auch eine relativ heftige Strafe bekommen kannst.

Die anderen Optionen, wie "selbst benutzen", "im Darknet verkaufen" oder "an Geheimdienste verscherbeln" sind allesamt höchst asozial und man muss schon ein ziemliches A*loch sein, um eine davon zu wählen.

Vergiss niemals, dass völlig unschuldige und unbedarfte Leute schweren Schaden durch Sicherheitslücken in den falschen Händen erleiden können. Dabei kann es sich auch um deine Eltern, deine Freundin oder deinen besten Kumpel handeln.

Denk bitte an die Allgemeinheit!

Deshalb melde Sicherheitslücken am besten anonym ohne jegliche Forderung nach Entlohnung, und zwar direkt an das betreffende Unternehmen, ohne weitere Umwege.

Fairerweise muss man aber sagen, dass es einem die meisten Unternehmen tierisch schwer machen, eine Sicherheitslücke zu melden und man dabei durchaus mal einen 8-Stunden-Tag damit totschlagen kann, die "richtige Stelle" zu finden, an die man sich wenden muss. Microsoft ist so ein Beispiel!

Ich suche zwar auch beruflich danach, habe aber immer sehr schlechte Erfahrungen mit dem freiwilligen Melden von Sicherheitslücken gemacht - also quasi ohne Auftrag.

Das lief i. d. R. bei mir immer so ab: 90% reagieren gar nicht, 9% drohen mit Anzeige bzw. schalten direkt einen Anwalt ein und von 1% kommt eine Dankesmail, allerdings ohne dass die Sicherheitslücken jemals geschlossen wurden!

Wenn du großes Glück hast, kannste bei Bug-Bounties mitmachen, und ein paar Almosen ernten, aber von solchen Aktionen mal abgesehen, sehe ich schwarz.

Und ich wiederhole mich noch mal: Sicherheitslücken an Kriminelle oder Geheimdienste zu verticken tun nur richtige Schweine. Ein vernünftig denkender Mensch tut so etwas nicht.

...zur Antwort

Die Tatsache, dass Antivirensoftware Betrug ist, und nicht funktioniert.

Dann würden vielleicht weniger Leute auf die Werbelügen der Antivirenhersteller hereinfallen, und für diesen Müll nicht auch noch Geld zum Fenster raus werfen.

...zur Antwort

Weil hier so viele etwas von schlechter Luft schreiben: Nein, in japanischen Städten gibt es keine solche schlechte Luft! Die Luft dort ist viiieeel besser als in deutschen Städten, und hier verwechseln alle diesen Grund mit China, wo die Luft in vielen Städten wirklich katastrophal ist.

Die beiden Hauptgründe dürften sein, um z. B. sich bei einer Bahnfahrt in der Grippe-Saison nicht selbst anzustecken, oder - falls man selbst krank ist - seine Mitmenschen anzustecken.

Außerdem tragen auch viele Leute Masken bei Pollenallergie, oder um damit Hautunreinheiten zu verbergen. Viele Frauen tragen auch lieber mal schnell eine Maske, wenn sie kurz einkaufen gehen, um sich nicht vorher extra schminken zu müssen.

Fazit: Es gibt viele Gründe, aber schlechte Luft kannst du in Japan getrost ausschließen. Der Hauptgrund dürfte - neben Heuschnupfen - die Vermeidung einer Ansteckung durch sich selbst oder andere sein.

...zur Antwort

Google mal nach "Assembler Programmierung" oder besorge dir entsprechende Bücher.

Falls du Windows-Nutzer bist, zum Beispiel das hier:

https://www.amazon.de/Introduction-Windows-Assembly-Language-Programming/dp/1543138845/

Das gleiche Buch gibt es auch für Macs und Linux. :)

Und es gibt sogar noch mehr Bücher zu dem Thema, aber das oben ist sehr aktuell, und didaktisch ausgezeichnet.

Es würde sich aber u. U. anbieten, wenn du vorher noch C lernst. Aber das musst du wissen ...

Und anstelle eines Privatlehrers, solltest du lernen, mit Büchern klar zu kommen. Du kannst nämlich nicht immer überall alles fragen, falls mal ein Problem auftritt. Selbstständiges Lernen ist enorm wichtig! :)

...zur Antwort

Eine IDE ist nur eine Art erweiterter Editor und im Grunde genommen kannst du damit das gleiche entwickeln, wie in jedem anderen Editor auch. (sogar Notepad!)

Wenn du mit C oder C++ 2D/3D Spiele entwickeln willst, benötigst du dafür entsprechende Bibliotheken, die überhaupt GAR NICHTS mit der IDE zu tun haben.

Fazit: Ja, du kannst eindeutig mit Dev-C++ Spiele in 2- und 3D bauen. Sogar mit notepad.exe - was ich aber mangels Komfort unterlassen würde! Aber im Grunde genommen alles kein Problem!

...zur Antwort

OK, noch eine zweite Antwort von mir, weil ich jetzt die anderen Antworten gelesen habe, und teilweise überhaupt nicht damit einverstanden bin, besonders beim Punkt "Kommentieren", der hier schon mehrfach genannt wurde.

Da du offensichtlich noch Einsteiger bist, besorge dir am besten für den Anfang dieses Buch:

https://www.amazon.de/Weniger-schlecht-programmieren-Kathrin-Passig/dp/3897215675/

Das ist zwar recht einfaches Niveau, aber deckt so ziemlich alle Punkte ab, die man als Einsteiger kennen sollte, um guten Code zu produzieren.

Es gibt viele Bücher, die in dieselbe Kerbe schlagen, zum Beispiel dieses etwas Java-lastige hier (wobei ich die englische Original-Ausgabe bevorzugen würde, falls du dir das zutraust):

https://www.amazon.de/Clean-Code-Refactoring-Patterns-Techniken/dp/3826655486/

Oder dieses sehr sehr gute hier (aber nur auf Englisch):

https://www.amazon.de/Art-Readable-Code-Dustin-Boswell/dp/0596802293/

Es gibt noch mehr solcher Bücher, aber ALLE haben eine Gemeinsamkeit: Sie warnen alle eindringlich vor Kommentaren und bieten WESENTLICH bessere Alternativen und Lösungsansätze an. (Nur damit du hier mal die bisherigen Antworten einsortieren kannst.)

Naja, es gibt noch wesentlich mehr Buchempfehlungen, die ich dir so geben könnte, aber eines der oben verlinkten sollte dir für den Anfang die Richtung weisen.

Viel Erfolg! :)
...zur Antwort

Du könntest eine einfache kleine virtuelle Maschine (VM) schreiben, um ein Gefühl dafür zu bekommen, wie Register, Stack, usw. funktionieren und wie "teuer" es ist, bestimmte Operationen einzusetzen. Dieses Wissen hilft dir dann später auch weiter, effizienteren Code in anderen Sprachen zu schreiben.

Eine primitive VM geht schnell an einem Nachmittag, auch wenn du noch nicht allzu fortgeschritten bist, aber es lohnt sich, wird dich nicht überfordern, und das Projekt ist leicht erweiterbar, falls du irgendwann mal zusätzliche Instruktionen und Operationen unterstützen willst.

Ansonsten hilft eigentlich nur: Üben, üben, üben, ... :)

...zur Antwort

Wenn du nur blind irgendwelche APIs zusammenklebst, brauchst du kein Mathe, aber sobald du IRGENDETWAS Eigenes entwickeln willst, benötigst du zumindest die Grundlagen aus der Schulzeit.

Falls du etwas mit Spieleentwicklung machst, hilft dir Wissen in Vektorrechnung und den gängigen Algorithmen zur Pfadfindung und Kollisionsfeststellung weiter, wobei ich das alles noch nicht als "Mathematik", sondern eher als "Rechnen" bzeichnen würde.

Falls du Audio-Sachen machst, ist FFT und IFFT enorm nützlich.

Richtig höhere Mathematik hilft dir aber auch als Entwickler beim Lösen von Optimierungsproblemen weiter, aber das sind Dinge, mit denen man als "popeliger Programmierer" normalerweise weniger zu tun hat ... obwohl es hier erst richtig anfängt Spaß zu machen! :)

Fazit: "Programmierer" ist ein recht dehnbarer Gummibegriff ... hängt halt davon ab, WAS du so programmierst. :)

...zur Antwort

Bei C++ sind sowohl Strukturen als auch Klassen eindeutig Wertetypen. Die beiden sind sogar identisch, bis auf eine unterschiedliche Standardsichtbarkeit der Member.

Beispiel:

struct Foo {
  char c;
  bool b;
};

// ...

Foo fv { 'A', true }; // Werttyp!
Foo fr & = fv; // Referenz!

cout << fv.c << ' ' << fv.b << endl;
cout << sizeof(fv) << ' ' << alignof(fv) << endl;

cout << fr.c << ' ' << fr.b << endl;
cout << sizeof(fr) << ' ' << alignof(fr) << endl;

Am besten, du liest nochmal die entsprechenden Kapitel in deinem Lehrbuch / Tutorial, falls du damit noch Probleme hast. Hab jetzt leider keine Zeit mehr ...

Viel Spaß! :)

PS: Zu deiner C-Struktur "Node" ...

Node ist eine Struktur, aber ein Zeiger (!) auf die Struktur ist eine Referenz.

int i = 123; // Wert
int * ip = &i; // Referenz (auf Wert)
...zur Antwort

Gleitpunktzahlen sind bei den meisten Programmiersprachen - ohne zusätzliche Drittbibliotheken - grundsätzlich nicht als genau anzusehen.

Allerdings liegt das Problem bei dir vermutlich eher an der Ausgabe, als an der Berechnung.

Probiere mal:

cout.precision(8);

cout << deineZahl << endl;

... oder falls du das alte C-API nutzt:

printf("%.8f\n", deineZahl);

In jedem Fall solltest du verstehen, dass ein Computer mit Gleitpunktzahlen prinzipbedingt nicht genau rechnen kann, sondern nur näherungsweise an die richtige Lösung ran kommt. Für alles andere müsstest du "irrationale Zahlen" in Form von "Formeln" akzeptieren, aber "reelle Zahlen" haben nun mal einen begrenzt gültigen Bereich, erst recht, innerhalb der CPU eines Computers.

Beispiel:

if (0.1 + 0.1 + 0.1 == 0.3) {
  cout << "Gleich! :)" << endl;
} else {
  cout << "Ungleich! :(" << endl;
}

Ich habe das jetzt nicht getestet, würde aber wetten, dass dabei "Ungleich!" ausgegeben wird. Warum das so ist, findest du hier:

https://de.wikipedia.org/wiki/IEEE_754

Außerdem solltest du dich damit beschäftigen, wie du die Ausgabe von Werten formatieren kannst, sowohl bei C++-Streams, als auch bei der printf()-Familie aus C:

https://en.cppreference.com/w/cpp/io/ios_base/precision

... und ...

https://en.cppreference.com/w/cpp/io/c/fprintf

Viel Spaß! :)
...zur Antwort

Ja, das geht sehr komfortabel mit JavaFX.

Allerdings geht das auch mit Swing! Ich habe so um die 2000-Wende eine kleine Bibliothek, hauptsächlich bestehend aus einem eigenen LayoutManager und einigen Hilfsklassen gebaut, die eine Swing-Anwendung auf 640x480 genauso aussehen ließ, wie bei damals maximal üblichen 1600x1200.

Vor ca. 10 Jahren habe ich so etwas Ähnliches für Lazarus-Anwendungen mit FreePascal geschrieben und vor einer Weile für Oberflächen mit der ollen alten Win32-API, damit die auch noch bei 4K vernünftig nutzbar sind.

Alles in allem eine Nachmittagsaufgabe und eigentlich in jeder Sprache bei jedem GUI-Framework möglich! Im Grunde genommen, musst du ja nur durch die Widgets iterieren, deren Position und Größe speichern, und bei einer Fenstervergrößerung die Elemente im Verhaltnis vergrößern / verkleinern, und Schriftgrößen anpassen.

Implementierungsdetails hängen natürlich von den verwendeten APIs ab, aber alles in allem hat das AUSNAHMSLOS immer sehr gut funktioniert ... ich frage mich, warum das nicht viel mehr Anwendungen machen, denn auf einem 4K-Display sind 16x16 Icons in der Toolbar nicht wirklich brauchbar. :)

Fazit: Du kannst dir etwas eigenes schreiben! Das ist nicht besonders aufwändig und - falls du schon fortgeschritten bist - an einem Nachmittag erledigt. :)

...zur Antwort

Weil fast alle Programmiersprachen deutlich bessere Konzepte im Bezug auf Sprünge - oder allgemein Kontrollstrukturen - bieten, die ein strukturierteres Arbeiten erlauben und keine, bzw. sehr wenige, schlechte Nebeneffekte haben, welche - wie goto eben - Bugs verursachen und schlecht wartbaren Code erzeugen.

Die einzige Ausnahme dürfte hier C sein, denn dabei zeigt sich sehr gut, wie man wirklich schön sauberen und aufgeräumten Code schreiben kann, der in dieser Form ohne goto gar nicht möglich wäre.

Deshalb nutzen auch so ziemlich alle großen OpenSource-Projekte, die auf C setzen, die gleichen Techniken mithilfe von goto, die du auch in jedem Kernel eines modernen Betriebssystems, oder allgemein in der Treiberentwicklung, wiederfindest.

Aber wie gesagt, C ist hier die einzige Ausnahme, zumal man sich dabei streng an selbst auferlegte Regeln halten muss, um sich mit goto nicht in den Fuß zu schießen.

Bei vielen Basic-Dialekten findet man ebenfalls goto, aber wenn diese älter sind (QL-Basic, Quickbasic, etc.) hat man eben keine besseren Werkzeuge zur Hand und ist zwangsläufig auf den Einsatz von goto angewiesen. Neuere Basicdialekte hingegen haben vernünftige Kontrollstrukturen, die man in jeder modernen Hochsprache wiederfindet, und deshalb gibt es bei VisualBasic oder Gambas auch keine Ausrede für den Einsatz von goto.

Bei verschiedenen High- und Lowlevel-Assemblern gibt es meist nur "nackte" Sprünge, also quasi nochmal etwas extremer genau das, was goto in Hochsprachen so macht, aber Sprunginstruktionen kann man sowieso nicht mit goto gleichsetzen.

In Shellskripten gibt es oft nicht die Möglichkeiten einer Hochsprache, und meist auch irgendeine Form von goto, ich habe aber persönlich noch nie dazu greifen müssen und immer elegantere Lösungen mithilfe von Schleifen, Bedingungen, Funktionen, usw. gefunden.

C++ hat seine Wurzeln zwar in der C-Welt, aber wurde stark weiterentwickelt, weshalb es bei C++ - im Gegensatz zum guten alten C - keinen Grund gibt, goto einzusetzen. Bei C++ kann man wesentlich ordentlicheren Code mithilfe von RAII und Ausnahmebehandlung schreiben, was meist keinen nennenswerten Overhead hat.

Auch bei Java, C# oder Skriptsprachen wie Python, Ruby, etc. setzt man auf Ausnahmen zur Fehlerbehandlung. Bei Go, Swift und vielen anderen Sprachen gibt es noch weitere Interessante Konzepte, die langsam ihren Weg auch in andere Sprachen finden.

Fast alle Hochsprachen bieten auch einen objektorientierten Ansatz, sodass man Code schön kapseln, und die sog. zyklomatische Komplexität sehr elegant reduzieren kann.

Wie gesagt, C ist die einzige Ausnahme, bei der das alles nicht geht, und aus diesem Grunde ist goto bei C auch nicht bloß erlaubt, sondern sogar sehr empfehlenswert, wenn man auf ordentliche Codequalität und sichere Programmierung achten möchte.

Es hat sich allerdings leider eingebürgert, goto blind zu verteufeln, sodass die meisten Einsteiger und sogar viele Profis von goto auch bei C abraten, ohne sich jemals wirklich Gedanken darum gemacht und sich damit beschäftigt zu haben.

"goto ist böse" hat sich zu einem Dogma entwickelt, was oft zwar wirklich berechtigt ist, aber eben auch nicht immer zu 100%.22

Falls du jetzt aber denkst: "Oh, dann kann ich ja beruhigt goto einsetzen" ... Nein, solltest du nicht! Da du noch Einsteiger bist, lerne erst mal wie man mit all den anderen Kontrollstrukturen umgeht, falls du überhaupt C nutzt. Falls nicht, hat sich die Frage nach goto sowieso erledigt. :)

Fazit: Bei C ist goto sehr gut, WENN man weiß, was man tut ... ansonsten ist goto vermutlich zu 99,999% schlecht. :)

...zur Antwort