Обсуждение файла:Printf stack lack.svg

Последнее сообщение: 15 лет назад от Achp ru в теме «Рисунок некорректен»


Рисунок некорректен

править

С точки зрения языка Си/Си++ рисунок содержит некорректность. Фактические параметры (int)0x11223344 и 'b' оба имеют один и тот же тип int. Как же может выходить, что они имеют разный размер?--achp 22:11, 14 сентября 2008 (UTC)Ответить

Поясните, как это? sizeof('b') = один (максимум, два) байта. #!George Shuklin 10:07, 15 сентября 2008 (UTC)Ответить
Во-первых в Си выражение 'b' вообще изначально имеет тип int (в последнем стандарте п. 6.4.4.4, абзац 10; правило существует со времён Кернигана и Ритчи).--achp 12:13, 15 сентября 2008 (UTC)Ответить
Во-вторых и в Си, и в Си++ для фактических параметров, соответствующих ...-части сигнатуры, проводится процедура стандартного продвижения типов аргументов (в стандарте Си++ п. 5.2.2, абзац 7), то есть в данном случае целочисленного продвижения. Эта процедура описана в п. 4.5; абзац 1 указывает, что значение типа char преобразуется к типу int, если тип int способен вместить все значения, которые может принять char, unsigned int в ином случае.--achp 12:13, 15 сентября 2008 (UTC)Ответить