你好 Martin,
Völlig schnurz. Wenn die CPU irgendwann über den Code herfällt, ist -1
genau dasselbe wie 0xFFFFFFFF, nur handlicher geschrieben.
Negative Zahlen werden nicht immer im Zweierkomplement abgebildet. Aus dem
Standard:
6.2.6.2 Integer types
2 [...]
If the sign bit is one, the value shall be modified in one of the
following ways:
— the corresponding value with sign bit 0 is negated (sign and
magnitude);
— the sign bit has the value -(2N) (two’s complement);
— the sign bit has the value -(2N - 1) (one’s complement).
Das heisst, der Compiler hat die Möglichkeit, zwischen drei Darstellungen
zu wählen. Dein Code ist also in höchstem Maße Compiler-spezifisch.
OK, ich würde Assembler als die Mutter aller Sprachen bezeichnen, weil
jeder Compile-Vorgang, jede virtuelle Maschine später bei einer
Assembler-Art landet, [...]
Nö, du, ich habe schon VMs gesehen, die nur mit Syntax-Bäumen arbeiten und
den Schritt zum Assembler nicht machen.
Mit %n kannst du in die korrespondierende Integervariable schreiben,
wieviele Elemente printf bislang bearbeitet hat:
Das stimmt nicht: %n schreibt die Anzahl der geschriebenen Chars in die
Variable. Nicht die Anzahl der Elemente, die bearbeitet wurden.
Du liebe Güte - wo ist das denn her? Das habe ich hier auch zum ersten
Mal gelesen. Abgesehen davon ist mir absolut unklar, wozu das gut sein
soll.
printf() kann die Verarbeitung abbrechen - etwa, wenn in den Output-Stream
nicht mehr geschrieben werden kann, wegen eines vollen Send-Buffers oder so
(gibt dann ein EAGAIN). Eignet sich also z. B. um festzustellen, an welcher
Stelle man den Funktions-Aufruf fortsetzen muss.
D.h. mit %n schreibst du auf dem Stack!
Nein: kannst du auf den Stack schreiben. Man muss nicht. Nichts hindert
einen daran, die Variable auf dem Heap anzulegen :)
再见,
克里斯蒂安
Block-Installation Nr. 5 | Renovation der Mensa-Nord
Q: God, root, what's the difference?
A: God is merciful.
http://wwwtech.de/