getc()与fgetc()-主要区别是什么?
无论我在哪里看到“它实际上是相同的”,或类似的东西 发件人: GNUC库中还有另一个函数名为fgetc。它在大多数方面与getc相同,只是getc通常作为宏函数实现,并且经过高度优化,因此在大多数情况下更可取。(在从标准输入读取数据的情况下,getc大约与fgetc一样快,因为与计算机读取输入数据的速度相比,人类的输入速度较慢,但当您从非人类交互生成的流中读取数据时,fgetc可能会更好。)getc()与fgetc()-主要区别是什么?,c,fgetc,getc,C,Fgetc,Getc,无论我在哪里看到“它实际上是相同的”,或类似的东西 发件人: GNUC库中还有另一个函数名为fgetc。它在大多数方面与getc相同,只是getc通常作为宏函数实现,并且经过高度优化,因此在大多数情况下更可取。(在从标准输入读取数据的情况下,getc大约与fgetc一样快,因为与计算机读取输入数据的速度相比,人类的输入速度较慢,但当您从非人类交互生成的流中读取数据时,fgetc可能会更好。) 其他的区别是什么?我听说它们各自有一个不同的实现(其中一个可以用作宏),但是,是什么使它们如此不同(或足
其他的区别是什么?我听说它们各自有一个不同的实现(其中一个可以用作宏),但是,是什么使它们如此不同(或足够不同)以致于它们都在标准C库(或规范)中呢。您应该看看它们的实现:它们是自由软件实现。现在它们可以实现为内联函数(与宏一样快)
我也不会那么麻烦了。在现实生活中,I/O主要受硬件的限制(例如访问磁盘的时间)。来自Unix环境中的
高级编程
:
getc
和fgetc
之间的区别在于getc
可以
作为宏实现,而fgetc
不能作为宏实现
宏。这意味着三件事:
的参数不应是具有副作用的表达式getc
- 既然
保证是一个函数,我们可以获取它的地址。这允许我们将fgetc
的地址作为参数传递 转到另一个函数李>fgetc
- 对fgetc的调用可能比对
的调用花费更长的时间,因为调用函数通常需要更多的时间getc
在99.9%的案例中,这些差异似乎毫无意义 有一点可能会有所不同,即
getc()可以作为一个宏来实现,该宏对流进行多次计算
在某些情况下(不是很有用),可能会导致奇怪的行为,例如:
FILE *my_files[10] = {...}, *f=&my_files[0];
for (i=0; i<10; i++) {
int c = getc(f++); // Parameter to getc has side effects!
}
FILE*my_files[10]={…},*f=&my_files[0];
对于(i=0;iGood info here:@user814064,您的链接引用了fgets
vsfgetc
,OP询问的是getc
vsfgetc(),以及它的优点。@user814064,您可以直接链接到答案(通过单击共享)非常感谢。我已经发布了不到一周的时间,我还有很多东西要学习。我以为那是FaceBook或其他什么。我升了+1,但是:为什么它们都在标准库中?为什么不能都是宏?@day你的意思是“如何”如“实现细节是什么”或“你如何做到这一点(道德上或技术上)”?