Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
С этим всё предельно понятно. Первый аргумент - строка... 19.11.14 14:02 Число просмотров: 2008
Автор: Den <Denis> Статус: The Elderman Отредактировано 19.11.14 14:03 Количество правок: 1
|
> Так и не понял о чем вы спрашивали и что отвечали. > > va_start/va_arg/va_end работают с аргументами на стеке > согласно "C calling conversion" и ABI (Application Binary > Interface) для конкретной платформы/компилятора.
С этим всё предельно понятно. Первый аргумент - строка формата, описывающая последовательность и размеры передаваемых в этом же кадре стека аргументов, значения которых используются при выводе на печать.
> В printf после убирания "звездочки" заработало потому, что > сама "звездочка" требует аргумента на стека (который > определяет необходимую "ширину" вывода).
"Звездочка" стоит в позиции, отвечающей за минимальное количество выводимых на печать символов.
(number) - "Minimum number of characters to be printed. If the value to be printed is shorter than this number, the result is padded with blank spaces. The value is not truncated even if the result is larger."
* - "The width is not specified in the format string, but as an additional integer value argument preceding the argument that has to be formatted."
Если я правильно понимаю написанное:
Ширина не указана в строке формата, но как дополнительный аргумент целочисленного значения, предшествующий аргументу, который должен быть отформатирован.
Этот параметр нужен для резервирования минимального количества символов печатаемого аргумента, чтобы поддерживать стабильную ширину (например при выводе табличных данных на консоль). То есть не важно, какого размера в стеке аргумент, т.к. размер в стеке аргумента определяется следующими символами (в моем случае "ll" - long long).
На мой взгляд, наличие или отсутствие "звёздочки", в данном случае, никак не должны были влиять на выводимый аргумент, но наличие "звёздочки" толи портит старшее DWORD аргумента, толи сдвигает на DWORD указатель на аргумент.
Может я что-то не правильно понял?
|
|
|