Обсуждение:Printf

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Впервые функция появилась...[править код]

...скорее всего в языке B (предшественник C) [1], а в BCPL (предшественник B) была похожая функция writef [2]. (это, конечно, может быть и не так, но утверждать, что prinft впервые появилась в C тоже не следует) --Anton Khorev 18:14, 14 декабря 2006 (UTC)[ответить]

Про CPL:
  • [3] здесь бы была статья 63-го года, если бы веб архив сохранил картинки (или журнал не решил, что хватит давать статьи на халяву)
  • [4] здесь, возможно, есть статьи, но у меня ни одна не открылась
  • [5] предыдущую ссылку нашёл отсюда по названию журнала
--Anton Khorev 18:17, 16 декабря 2006 (UTC)[ответить]
История появления: "Первые следы будущей функции printf появляются в языке BCPL в начале 1960-х." BCPL появился в 1966-м, а в начале 60-х появился CPL. Что было в CPL нам всё ещё не известно? --Anton Khorev 01:57, 14 января 2007 (UTC)[ответить]
Это, на самом деле, уже не очень существенно, первый раз printf появился в "би". А кто там первый writef придумал - вопрос сложный. Я не смог найти открытых источников, где описывался бы cpl, так что этот вопрос остаётся открытым. #!George Shuklin
BCPL появился не в начале 60-х, а позже, следовательно, в BCPL в начале 60-х ничего появиться не могло. --Anton Khorev 17:42, 14 января 2007 (UTC)[ответить]
Вобщем, годы съехали. Написано, что BCPL появился тогда, когда появился CPL, и что B появился тогда, когда BCPL. --Anton Khorev 17:46, 14 января 2007 (UTC)[ответить]
Убрал "начало" у 60-х, заменил 66 на 69. --Anton Khorev 19:51, 16 января 2007 (UTC)[ответить]

И даже это не совсем правда. Фортрановский форматный вывод появился заметно раньше, а влияние его на printf видно невооружённым глазом. Maxim Razin 21:30, 17 января 2007 (UTC)[ответить]

Я о фортране слышал только на лекциях, и то краем уха. Точнее, о языке-то я знаю, но вот писать на нём б-г миловал. Если можете назвать источники - дайте ссылки, постараюсь объединить в текст. #!George Shuklin 21:43, 17 января 2007 (UTC)[ответить]

Использование в других языках программирования[править код]

Почему для всех языков программирования в данной статье даётся ссылка на функцию printf, а для perl на sprintf? Ведь в языке perl тоже есть функция printf.Soldatov 23:25, 14 января 2007 (UTC)[ответить]

Ссылка относится к синтаксису строки форматирования, про который написано в описании функции sprintf. --Anton Khorev 00:23, 15 января 2007 (UTC)[ответить]
Не для всех. В том же питоне нет "принтфа", есть только оператор %, который работает несколько иначе (и является аналогом asprintf). Список отражает не использование слова "принтф", а использование концепции "строки форматирования".#!George Shuklin
Да в Питоне он и не нужен, поскольку оптимизация никогда не ставилась целью. Создать строку, а потом вывести её в поток — потери в производительности очень небольшие. Это я к тому что в некоторых языках printf просто может не быть, причём сознательно. — doublep 17:34, 18 января 2007 (UTC)[ответить]

О типах[править код]

Например, строка printf("%i=%i", 'a', 'b') отработает правильно на большинстве архитектур (не смотря на то, что размер %i - int (32 или 64 бита), а размер 'a' (char) - 8 бит.

Не на большинстве, а на всех без исключения, так как к аргументам целочисленных типов, которым не сопоставлены формальные параметры, применяются стандартные правила продвижения целочисленных типов. Недаром в стандарте Си 1990 года (и, соответственно, в стандарте Си++) отсутствуют описанные в данной статье модификаторы h и hh. Эти модификаторы появились в стандарте Си 1999 года, но, за исключением случаев использования со спецификатором n, они предназначены для компенсации изменяющих значение последовательностей продвижения типа и смены интерпретации "знаковый/беззнаковый".

Кроме того, некорректно так писать о размерности int и char. Эти величины платформо-зависимые, и существуют платформы с 32-битным байтом.--achp 17:27, 18 января 2007 (UTC)[ответить]

Некоторые встраиваемые архитектуры не имеют средств адресации "внутрь" 32-битного слова. На них байт 32-битный.--achp 19:25, 30 июня 2007 (UTC)[ответить]
Источник? #!George Shuklin 21:22, 30 июня 2007 (UTC)[ответить]
[6]--achp 21:48, 30 июня 2007 (UTC)[ответить]
Справедливости ради надо отметить, что реализации, где CHAR_BIT != 8, всегда самостоятельные, а в таких реализациях printf может отсутствовать (и даже скорее всего отсутствует). Что не исключает такой возможности.--achp 22:09, 30 июня 2007 (UTC)[ответить]

Переписывание статьи[править код]

Пытаюсь переписать статью, чтобы избавить её от ложных утверждений и структурировать её по языкам, пока в своей песочнице. Прошу помощи, в частности, было бы замечательно сделать картинки, подобные тем, что имеются в настоящей статье, но соответствующие действительности. Также было бы неплохо написать немного больше по языкам помимо Си/Си++.--achp 22:41, 29 июня 2007 (UTC)[ответить]

Самая большая фактическая ошибка — это вопрос о char и short.--achp 19:35, 30 июня 2007 (UTC)[ответить]

Направление роста стека на картинке 2 - неправильное 85.233.156.97 10:30, 2 июля 2010 (UTC)[ответить]

Откат верной правки[править код]

Не понимаю, почему участник George Shuklin откатил верную правку участника Indaclu6?--achp 22:07, 14 сентября 2008 (UTC)[ответить]

Неверная ссылка на статью[править код]

XSI . Надо либо переадресацию убрать, либо статью-disambiguation сделать, либо ссылку переименовать. 87.249.56.219 20:31, 16 декабря 2009 (UTC)[ответить]