无论什么地方我都看到“它几乎是一样的”或者类似的东西..。
来自GNU C编程教程:
GNU库中还有一个名为fgetc的函数。它在大多数方面都与getc相同,只是getc通常作为宏函数实现,并且是高度优化的,因此在大多数情况下更可取。(在从标准输入读取的情况下,getc大约与fgetc一样快,因为人类键入的速度比计算机读取输入的速度要慢,但是当您从不是由人交互生成的流中读取时,fgetc可能更好。)
其他的区别是什么?我听说它们每个都有不同的实现(其中一个可以用作宏),但是,是什么使它们不同(或足够不同)使它们都在标准C库(或规范)中呢?
发布于 2013-08-28 07:26:01
在99.9%的案例中,这种差异似乎毫无意义。
手册页说,有一点可能会有所不同-- getc() may be implemented as a macro which evaluates stream more than once
说。
在某些情况下(不太有用),它可能导致奇怪的行为,例如:
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
在这种情况下是安全的。
https://stackoverflow.com/questions/18480982
复制相似问题