Я читал книгу программирования C Керниганом и наткнулся на это. Разница между двумя или их соответствующими критериями использования. Я нашел несколько сообщений в StackOverflow, которые касались этой проблемы. Я получил часть своего ответа, но с небольшими проблемами понял их.
Как упоминалось здесь (putc требует stdout, vs puts):
Согласно книге Кернигана
putc
эквивалентнаfputc
, ноputc
может быть реализована как макрос, аputc
может оценивать свой аргумент потока более одного раза.Разница между
putc
иfputc
заключается в том, что с помощьюputc
вы рискуете запустить версию макроса, которая по своей сути является небезопасной, потому что ей, возможно, придется оценивать ее аргумент потока более одного раза. Это вызывает осложнения, о которых большинство людей не знает и, следовательно, не следит за ними, поэтому лучше использоватьfputc
. Макросfputc
не имеет этой проблемы.
Вопросы:
-
putc
может быть реализован как макрос, но в чем проблема с тем же, что и сfputc
? -
Во втором заявлении упоминаются некоторые осложнения и проблемы безопасности. Что это такое?
-
putc
оценивает свой аргумент более одного раза. Итак, каковы преимущества или недостатки, которые он представляет по сравнению с оценкой аргумента.