URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7526
[ Назад ]

Исходное сообщение
"getc vs fgetc"

Отправлено rasmon , 04-Авг-08 18:50 
Подскажите разницу между функциями Си: getc и fgetc .
Вот цитата из Кенигана  и Ритчи:
getc делает тоже, что и fgetc, но в отличие от последней, если она - макрос, поток может браться более одного раза.

Я не понимаю фразы "поток может браться более одного раза".
Это почему я не могу "взять поток" больше одного раза? Что имеется ввиду?
Такой же вопрос можно задать относительно функций  putc и fputc.


Содержание

Сообщения в этом обсуждении
"getc vs fgetc"
Отправлено Michelnok , 04-Авг-08 19:22 
>getc делает тоже, что и fgetc, но в отличие от последней, если
>она - макрос, поток может браться более одного раза.

Следует читать не "поток может браться...", а "параметр stream может вычисляться...". Т.е. getc может быть макросом, и если ты в качестве параметра ей укажешь выражение, то это выражение может быть выполнено заранее неизвестное количество раз.
Например, неизвестно чему будет равна переменная stream после "вызова" getc(stream++).


"getc vs fgetc"
Отправлено anonymous , 04-Авг-08 22:34 
>Например, неизвестно чему будет равна переменная stream после "вызова" getc(stream++).

Лучше такой пример: есть функция get_stream() возвращающаяя поток.  Неизвестно, сколько раз она будет вызвана во время getc(get_stream())


"getc vs fgetc"
Отправлено rasmon , 06-Авг-08 17:25 
>>getc делает тоже, что и fgetc, но в отличие от последней, если
>>она - макрос, поток может браться более одного раза.
>
>Следует читать не "поток может браться...", а "параметр stream может вычисляться...". Т.е.
>getc может быть макросом, и если ты в качестве параметра ей
>укажешь выражение, то это выражение может быть выполнено заранее неизвестное количество
>раз.
>Например, неизвестно чему будет равна переменная stream после "вызова" getc(stream++).

То есть, имеются ввиду всего лишь навсего так называемые "побочные эффекты" использования макросов?
Также, получается, что, если "не уверен", то используй fgets? )


"getc vs fgetc"
Отправлено Michelnok , 06-Авг-08 19:30 
>
>То есть, имеются ввиду всего лишь навсего так называемые "побочные эффекты" использования
>макросов?

Да.