gpt4 book ai didi

c - getc 不止一次评估流

转载 作者:行者123 更新时间:2023-12-05 08:16:48 25 4
gpt4 key购买 nike

在阅读 getc 手册页时,我遇到了:

may be implemented as a macro which evaluates stream more than once.

那么,getc 也可以作为一个函数来实现——多次评估流究竟意味着什么?

最佳答案

考虑一个函数:

FILE *getstream(void);

还有一个代码:

int c = getc(getstream());

如果 getc 是一个函数,getstream 将只被调用一次,其结果将存储在一个临时变量/寄存器中并传递给 getc.

如果 getc 是一个宏,可以这样说:

#define getc(s)  ((s) == NULL) ? -1 :_getc(s))

它将扩展为:

int c = (((getstream()) == NULL) ? -1 :_getc(getstream()));

也就是说,它将调用 getstream() 两次。万一 getstream 有一些副作用(使用 IO,修改一些全局状态),程序的流程在这两种情况下会有所不同,必须意识到这一点。

关于c - getc 不止一次评估流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69315769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com