宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

两个都是用来从stream中取得一个字符的,区别在于调用getc函数时所用的参数stream不能是有副作用的表达式稍后解释),而fgetc函数则可以,也就是说,getc可以被当作宏来调用,而fgetc只能作为函数来调用。 

一般来说,调用宏比调用函数耗费的时间少。

所以fgetc是一个函数 
getc是一个宏 
一般来说宏产生较大的代码,但是避免了函数调用的堆栈操作,所以速度会比较快。

有副作用的表达式,指的是表达式执行后,会改变表达式中某些变量的值

#include <stdio.h>#define MACRO_SQRTx) x*xint func_sqrtint x){ return x*x;}int main){ int x=10,y=10; int xx,yy; xx=func_sqrt++x); printf”xx=%d,x=%d\n”,xx,x); yy=MACRO_SQRT++y); printf”yy=%d,y=%d\n”,yy,y); return 0;}
运行结果:

[root@nn c]# gcc getc.c [root@nn c]# ./a.out xx=121,x=11yy=144,y=12

总结:fgetc和getc最大的区别在前者是函数,后者是宏,getc由fgetc通过宏实现,调用的时候注意参数stream不能是有副作用的表达式

一分快三技巧准确率100 printf”xx=%d,x=%d\n”,xx,x); yy=MACRO_SQRT++y); printf”yy=%d,y=%d\n”,yy,y); return 0;}
运行结果:

[root@nn c]# gcc getc.c [root@nn c]# ./a.out xx=121,x=11yy=144,y=12

总结:fgetc和getc最大的区别在前者是函数,后者是宏,getc由fgetc通过宏实现,调用的时候注意参数stream不能是有副作用的表达式