*printf vs. *puts
чьи-то глупые привычки
Не такие уж и глупые, зачем нужны две функции, когда хватает одной. Если кому-то так удобнее - какие проблемы ?
---
...Я работаю антинаучным аферистом...
printf потихоньку становится встроенной функцией, анализ константных шаблонов переносится на стадию компиляции.
Насколько я понимаю, printf заменяет \n на OS-dependent перенос строки (\r\n, \n, \r\n, ...) а fputs это так сказать "бинарный" вывод. А?
Наподобие strtoXXX, в обратную сторону.
---
Q24: Только ли unix suxx?
A24: Проявления suxx-а неисчислимы.
Во-вторых, бинарный вывод называеься fwrite.
Приложения:
NAME
fputs - put a string on a stream
NAME
fwrite - binary output
SUS v.2
Кстати, здесь, в первую очередь, OS = UNIX.
Конкретнее --- {Free,Net}BSD.
Но и других тоже касается.
---
...Я работаю антинаучным аферистом...
и занимается он вовсе не выводом строк, пусть бинарных, а выводом областей памяти
Насколько я понимаю, printf заменяет \n на OS-dependent перенос строки (\r\n, \n, \r\n, ...) а fputs это так сказать "бинарный" вывод. А?нет
fputs на текстовый поток (открытый не как "wb", а просто как "w") тоже конвертит '\n' в OS-dependent перенос строки, если вывод в бинарный поток - не конвертит соответственно. afaik *printf аналогично. Даже fread/fwrite конвертит <newline> в случае текстового файла и не конвертит в случае бинарного. (ISO/IEC 9899:1999)
а ты почитай SUSv3
NAME
fwrite - binary output
SUS v.2
---
...Я работаю антинаучным аферистом...
Навряд ли там сильно поменялось.по крайней мере нет неосторожных формулировок типа "binary output"
и довольно конкретно и четко описано поведение, в отличие от susv2
Точно так же "binary output".
С точностью до лишних пробелов.
---
"Истина грядёт --- её ничто не остановит!"
Точно так же "binary output".да верно, туплю
С точностью до лишних пробелов.
но дальше самое интересное - из описания очевидно, что этот output не чуть не более binary, чем fputs и все остальное, потому что эквивалентен последовательности fputc(c).
Кстати, почему в стандарте не предусмотрели отдельных функций вывода чисел, по одному?Смотря в каком стандарте. Например:
Наподобие strtoXXX, в обратную сторону.
SysV Release 2, X/Open Portability Guide 2: ecvt(3 fcvt(3).
В линуксе они есть. На FreeBSD вроде нет. Под виндой есть.
В SUSv3 написано, что это legacy.
это означает, что для совместимости с SUSv3 его реализовывать не обязательно?
Legacy
The Legacy Option Group is denoted by the symbolic constant _XOPEN_LEGACY.
The Legacy Option Group includes the functions and headers which were mandatory in previous versions of IEEE Std 1003.1-2001 but are optional in this version.
These functions and headers are retained in IEEE Std 1003.1-2001 because of their widespread use. Application writers should not rely on the existence of these functions or headers in new applications, but should follow the migration path detailed in the APPLICATION USAGE sections of the relevant pages.
wprintf не аналогичен fputs.
Оставить комментарий
Ivan8209
Почему вместо "fputs(s, stdout)" пишут "printf("%s",s)"?То есть, я понимаю, что последнее проще,
но почему так делают даже там,
где по каким-то причинам не положено использовать даже getopt?
---
...Я работаю антинаучным аферистом...