![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
HellanD |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 443 Регистрация: 16.5.2006 Где: Киев Репутация: нет Всего: 2 |
Расскажите как работает функция printf(не ее описание а именно принцип работы и примерный код). Какой ее код, как реализуеться возможность печатанья
|
|||
|
||||
Dray |
|
|||
![]() Материалист ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 7.10.2003 Где: г. Всеволожск Репутация: 2 Всего: 6 |
Дык тут надо самому вызвать эту функцию в программе, поставить рядом с ней брэйкпоинт, в пошаговом режиме проследить ее работу, изучить код, который тут же распахнется, и если будут вопросы по этому коду, тогда уже задавать их сюда в более конкретной форме.
![]() |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Разбирается форматная строка, определяется количество и тип аргументов, дополнительные опции форматирования.
Потом пробегается по varargs и интерпретирует аргументы в соответствии с типами, полученными из форматной строки. Вообще, со многими компиляторами идут исходники стандартной библиотеки, так что можно и самому посмотреть. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Насчет кода, вот что дает гугл: http://www.menie.org/georges/embedded/index.html
Как видно из исходников по ссылке, в этой реализации в конце концов работа поручается функции putchar. Если я правильно понял вопрос, то спрашивалось как в конечном счете символы выводятся на экран/консоль? Для этого вызывается системная функция вывода соответствующей ОС. - для DOS это прерывание 21h, функция 9h, если склероз не изменяет, либо строка может напрямую копироваться в видеопамять. - для Windows вызывается соответствующая системная (WinAPI) функция, например WriteConsole или что-то в этом роде. --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
HellanD |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 443 Регистрация: 16.5.2006 Где: Киев Репутация: нет Всего: 2 |
Т.е. если я понял все сводится к АССЕМБЛЕРУ (для доса), а за счет чего тогда получаеться знаменитая переносимость С.
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
компиляторы С есть почти под любую платформу. Если у тебя есть исходник на C, в котором не используются библиотеки для конкретной ОС, а используется например только стандартная библиотека, то этот исходник в подавляющем большинстве случаев скомпилируется без переделки на других платформах. Реализация стандартной библиотеки использует специфичные для данной платформы средства, но интерфейс при этом сохраняется и почему АССЕМБЛЕР для доса?. Ассемблер бывает и под другие системы ![]() Суть компиляции - преобразование в машинный код и создание объектного файла, который потом компонуется (линкуется). Под Linux например полученный в gcc ассемблерный код не содержит досовских прерываний ![]() Это сообщение отредактировал(а) MAKCim - 6.6.2006, 10:22 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
regis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 12.12.2005 Где: Москва, Россия Репутация: 2 Всего: 7 |
Естественно, за счет того, что под всеми платформами есть и компилятор, и стандартные библиотеки. Последние обычно тоже на 90% написаны на C (т.е. переносимы), а оставшиеся 10% написаны на ассемблере, т.к платформенно-специфичны. --------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |