В этом случае параметры, полученные printf
, будут иметь тип int
.
Прежде всего, все, что вы передаете в printf (кроме первого параметра), подвергается "продвижению по умолчанию", что означает (среди прочего), что char
и short
оба повышаются до int
перед передачей. Таким образом, даже если то, что вы передавали, действительно имело тип char, к моменту, когда оно достигло printf
, оно имело бы тип int
. В вашем случае вы используете символьный литерал, который в любом случае уже имеет тип int
.
То же самое верно для scanf и других функций, которые принимают переменные параметры.
Во-вторых, даже без повышений по умолчанию символические литералы в C уже в любом случае имеют тип int
(§6.4.4.4 / 10):
Целочисленная символьная константа имеет тип int.
Итак, в этом случае значения начинаются с типа int
и не повышаются - но даже если вы начали с char
s, что-то вроде:
char a = 'a';
printf("%d", a);
... то, что получает printf
, будет иметь тип int
, а не тип char
в любом случае.