Warum ruft der folgende Aufruf auf:
%Vor% Ergebnis in den "richtigen" 97 98
-Werten?
% d zeigt an, dass die Funktion 4 Bytes an Daten lesen muss, und printf sollte nicht in der Lage sein, den Typ der empfangenen Argumente anzugeben (abgesehen von der Formatzeichenfolge), also warum ist nicht die gedruckte Zahl |a||b||junk||junk|
?
Vielen Dank im Voraus.
In diesem Fall sind die von printf
empfangenen Parameter vom Typ int
.
Zunächst wird alles, was Sie printf übergeben (mit Ausnahme des ersten Parameters), "Standard-Promotions" durchlaufen, was (unter anderem) bedeutet, dass char
und short
beide vor dem Übergeben in int
befördert werden. Also, selbst wenn das, was du passierst, wirklich char hatte, würde es printf
geben, wenn es int
hat. In Ihrem Fall verwenden Sie ein Zeichenliteral, das sowieso schon den Typ int
hat.
Dasselbe gilt für scanf und andere Funktionen, die variadische Parameter verwenden.
Zweitens haben Zeichenliterale in C auch ohne Standardpromotionen bereits den Typ int
anyway (§6.4.4.4 / 10):
Eine Ganzzahl-Zeichenkonstante hat den Typ int.
In diesem Fall beginnen die Werte mit dem Typ int
und werden nicht hochgestuft - aber selbst wenn Sie mit char
s angefangen haben, etwa wie folgt:
... was printf
empfängt, wäre vom Typ int
, nicht vom Typ char
auf jeden Fall.