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