首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >getc() vs fgetc() -主要区别是什么?

getc() vs fgetc() -主要区别是什么?
EN

Stack Overflow用户
提问于 2013-08-28 06:40:42
回答 3查看 57.9K关注 0票数 53

无论什么地方我都看到“它几乎是一样的”或者类似的东西..。

来自GNU C编程教程

GNU库中还有一个名为fgetc的函数。它在大多数方面都与getc相同,只是getc通常作为宏函数实现,并且是高度优化的,因此在大多数情况下更可取。(在从标准输入读取的情况下,getc大约与fgetc一样快,因为人类键入的速度比计算机读取输入的速度要慢,但是当您从不是由人交互生成的流中读取时,fgetc可能更好。)

其他的区别是什么?我听说它们每个都有不同的实现(其中一个可以用作宏),但是,是什么使它们不同(或足够不同)使它们都在标准C库(或规范)中呢?

EN

Stack Overflow用户

发布于 2013-08-28 07:26:01

在99.9%的案例中,这种差异似乎毫无意义。

手册页说,有一点可能会有所不同-- getc() may be implemented as a macro which evaluates stream more than once说。

在某些情况下(不太有用),它可能导致奇怪的行为,例如:

代码语言:javascript
运行
复制
FILE *my_files[10] = {...}, *f=&my_files[0];
for (i=0; i<10; i++) {
    int c = getc(f++);    // Parameter to getc has side effects!
}

如果getc评估f++不止一次,它将在每次迭代中推进f不止一次。相比之下,fgetc在这种情况下是安全的。

票数 22
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18480982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档