nufan hat geschrieben:Warnungen halten dich nicht davon ab, dass Programm zu kompilieren.
Warnungen sind dazu da dir den Code anzuschauen und nochmal zu überlegen was falsch ist.
nufan hat geschrieben:Castest du die Adressen sind die Warnungen weg.
Ich glaube klassisch wäre jetzt ein Kommentar von Xin angesagt, aber bis dahin erklär ich mal:
Casts sind in den meisten fällen ein Anzeichen eines Fehlers im Programmdesign. Das hier ist so ein Fall.
nufan hat geschrieben:Warum sich der Compiler beim anderen Code aufregt versteh ich auch nicht ganz.
Umso wichtiger dass du nicht leichtfertig Ratschläge zum Casten und ignorieren der Warnungen gibst, sondern dich zuerst mal schlau machst.
Wenn du dir die
Referenz von printf() ansiehst, dann steht da
x Unsigned hexadecimal integer
Das bedeutet die Funktion printf() liest das %X ein, und denkt sich auf dem Stack liegt ein unsigned und druckt es entsprechend aus. Es ist aber keines, sondern ein signed. Die probleme tauchen auf, wenn du versuchst eine negative Zahl mit %X anzuzeigen. (siehe
http://tutorial.proggen.org/doku.php?id ... m_computer).
Übrigens, genau dieses unvorsichtige Vorgehen mit printf() ermöglicht eine Reihe von sogenannten "Formatting String Attacks".
Hier bist du eigentlich schon auf die Problematik von printf() gestoßen, und wieso man es in C++ vermeiden sollte und stattdessen std::cout verwenden sollte: cout ist typsicher, und solche Fehler können nicht passieren. Wenn man ehrlich ist, dann ist es "eigentlich" eine ziemlich blöde Idee den Programmablauf (also eigentlich was alles angezeigt werden soll) anhand eines Strings zu bestimmen. Das zusammen mit der Variablen Argumentzahl macht (vielleicht nicht gerade printf, aber andere) solche Funktionen gefährlich.
Du kannst dich übrigens glücklich schätzen, dass dein Compiler in den Formatstring von printf() reinschaut und nicht einfach stupide sagt "ist eh nur ein string, kann ja nix passieren" wie andere Compiler es tun.
nufan hat geschrieben:EDIT: Hinweis zu cast hinzugefügt.
Wo denn? Bitte nochmal revidieren, mit der info der ich oben gegeben habe.
soufian88 hat geschrieben:Ja Gcc ich hab aber keine Ahnung warum der Compiler die Überflüssigen Fehler ausgibt.
Wie gesagt, gar nicht überflüssig sondern völlig zurecht.
Haters gonna hate, potatoes gonna potate.