putc нужен стандартный вывод, вместо пут - PullRequest
4 голосов
/ 30 декабря 2010

C историческим вопросом здесь.Почему для функции C putc требуется второй параметр, такой как

putc( 'c', stdout ) ;

В то время как put более удобен

puts( "a string" ) ;

В msvc ++

putchar( 'c' ) ;
есть функция

Что работает так, как можно ожидать putc.Я думал, что второй параметр putc должен был иметь возможность направлять putc в файл, но для этого есть функция fputc.

Ответы [ 4 ]

10 голосов
/ 30 декабря 2010
int putc ( int character, FILE * stream );

Записывает символ в поток и продвигает индикатор положения.
Таким образом, это более общая функция, чем putchar
Другие функции могут быть основаны на этом, например,

#define putchar(c) putc((c),stdout)  

Согласно книге Кернигана putc эквивалентно fputc, но putc может быть реализовано как макрос, и putc , возможно, придется оценивать свой аргумент потока более одного раза .
Я прочиталпредположительно, что оба существуют для обратной совместимости, но не уверены, что это действительно

2 голосов
/ 30 декабря 2010

Таким образом, у вас есть возможность вывода в другой поток, например, в файл.

fputc и putc определены в основном одинаково, за исключением того, что putc может быть макросом, которыйоценивает параметр потока более одного раза.fputc оценивает параметр потока только один раз.

1 голос
/ 30 декабря 2010

Разница между putc и fputc заключается в том, что при использовании putc вы рискуете запустить версию макроса, которая по своей сути небезопасна, поскольку может потребоваться оценить свой аргумент потока более одного раза. Это вызывает осложнения, о которых большинство людей не знают и поэтому не ожидают, поэтому лучше использовать fputc. Макрос fputc не имеет этой проблемы.

0 голосов
/ 31 декабря 2010

putchar() не только в MSVC - это стандартная функция C (ну, действительно, макрос).

...