关于putchar函数的几个问题putchar()函数的函数-查字典问答网
分类选择

来自杜淑琴的问题

  关于putchar函数的几个问题putchar()函数的函数体如下Charputchar(charc){x05If(c==’n’)x05{x05x05If(RI)x05x05{x05x05x05If(SBUF=X0ff)x05x05x05{x05x05x05x05Dox05x05x05x05{x05x05x05x05x05RI=0;x05x05x05x05

  关于putchar函数的几个问题

  putchar()函数的函数体如下

  Charputchar(charc)

  {

  x05If(c==’n’)

  x05{

  x05x05If(RI)

  x05x05{

  x05x05x05If(SBUF=X0ff)

  x05x05x05{

  x05x05x05x05Do

  x05x05x05x05{

  x05x05x05x05x05RI=0;

  x05x05x05x05x05While(!RI);

  }while(SBUF!=XON);//这里的XON是什么?

  RI=0;

  }

  }

  While(!TI);

  TI=0;

  SBUF=0x0d;//这句话有个注释是OUTPUTCR,

  }

  x05If(RI)

  x05{

  x05x05If(SBUF=X0ff)//这里的X0FF是什么?

  x05x05{

  x05x05x05Do

  x05x05x05{

  x05x05x05x05RI=0;

  x05x05x05x05While(!RI);

  }while(SBUF!=XON);

  RI=0;

  }

  }

  While(!TI);

  TI=0;

  Return(SBUF=c);

  }

  在上面的这个函数中,注释中的OUTPUT整个函数能够稍微解释一下就更好啦.

3回答
2020-05-18 21:38
我要回答
请先登录
刘莹莹

  你只是把程序的一部分拿过来了.不过这个代码中的这个写法比较郁闷,比如说If(SBUF=X0ff),如果说是判断SBUF的值是不是和X0ff相等,那么也应该是使用“==”符号才对,如果不是你的代码中写的有问题,那就是我才识浅薄了,代码中的XON,XOFF应该是在别的地方有定义的一个常数,一般是位于程序开头或者头文件中,比如用defineXONXXX;defineXOFFXXX,所以你要看全局了.不能断章取义.程序的大概意思就是if结构嵌套来判断了3个变量的值得状态,第一次是判断函数的参数charc是不是为换行符,然后判断变量RI为0还是非0,最后判断逻辑式SBUF==XOFF是不是成立,然后进入do{}while循环,而循环的退出条件则是逻辑式SBUF不等于XON成立.后面的程序也是大同小异的结构.而你说的有注释的那句OUTPUTCR,这个我没办法帮你解读,因为程序具体是干什么的我不是很清楚.很明显这只是一个工程的一部分,有些变量在程序片段中并没有定义或者声明,所以这个变量的其他使命也难以得之了.呵呵.相信你一定没问题.把程序都看完你就明白了.

2020-05-18 21:42:12
杜淑琴

  这个不是C语言的系统函数吗?头文件stdio.h里有printf()函数,而printf函数是有putchar()函数编成的。

2020-05-18 21:45:28
刘莹莹

  /****printf.c-printformattedCopyright(c)1985-2001,MicrosoftCorporation.Allrightsreserved.*Purpose:*******************************************************************************/#include#include#include#include#include#include#includeint__cdeclprintf(constchar*format,...)/**stdout'PRINT','F'ormatted*/{va_listarglist;intbuffing;intretval;va_start(arglist,format);_ASSERTE(format!=NULL);#ifdef_MT_lock_str2(1,stdout);__try{#endif/*_MT*/buffing=_stbuf(stdout);retval=_output(stdout,format,arglist);_ftbuf(buffing,stdout);#ifdef_MT}__finally{_unlock_str2(1,stdout);}#endif/*_MT*/return(retval);}以上是我从MS的SDK中拷贝出来的一段代码。printf的代码。printf并没有直接包含putchar函数,而且API函数,没必要深究究竟是怎么实现的,当然如果很有兴趣,也可以针对某一特定的平台来研究他得具体实现方法,API函数printf调用了_output函数,而_output函数也是一个库函数,只是printf(变长参数函数)实现了格式转换。但是在所用的C编译器和操作系统之间又存在函数API。从而调用系统函数实现了输入输出printf,scanf功能。而系统和计算机的硬件驱动程序之间相联系,最终由面向硬件的函数实现输入或者输出,例如printf函数通过C的API调用C的库函数_output,由_output中可知他还会调用几层结构后链接到系统的API函数上,系统的消息机制把参数传递给内核,处理后给硬件缓冲区分配空间,调用驱动程序来显示你需要的内容。根据不同的硬件,不同的操作系统,所对应的C编译器是不一样的,接口函数可能是一样的,但是内部的实现方法不同,所以库函数也不一定都相同。

2020-05-18 21:48:15

最新问答

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •