作业帮 > 综合 > 作业

关于putchar函数的几个问题

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/25 21:10:52
关于putchar函数的几个问题
putchar() 函数的函数体如下
Char putchar(char c)
{
\x05If(c==’\n’)
\x05{
\x05\x05If(RI)
\x05\x05{
\x05\x05\x05If(SBUF=X0ff)
\x05\x05\x05{
\x05\x05\x05\x05Do
\x05\x05\x05\x05{
\x05\x05\x05\x05\x05RI=0;
\x05\x05\x05\x05\x05While(!RI);
}while(SBUF!=XON);// 这里的XON是什么?
RI=0;
}
}
While(!TI);
TI=0;
SBUF=0x0d;//这句话有个注释是OUTPUT CR ,
}
\x05If(RI)
\x05{
\x05\x05If(SBUF=X0ff)//这里的X0FF是什么?
\x05\x05{
\x05\x05\x05Do
\x05\x05\x05{
\x05\x05\x05\x05RI=0;
\x05\x05\x05\x05While(!RI);
}while(SBUF!=XON);
RI=0;
}
}
While(!TI);
TI=0;
Return(SBUF=c);
}
在上面的这个函数中,注释中的OUTPUT 整个函数能够稍微解释一下就更好啦.
你只是把程序的一部分拿过来了.不过这个代码中的这个写法比较郁闷,比如说If(SBUF=X0ff),如果说是判断SBUF的值是不是和X0ff相等,那么也应该是使用“==”符号才对,如果不是你的代码中写的有问题,那就是我才识浅薄了,代码中的XON,XOFF应该是在别的地方有定义的一个常数,一般是位于程序开头或者头文件中,比如用define XON XXX ;define XOFF XXX,所以你要看全局了.不能断章取义.程序的大概意思就是if结构嵌套来判断了3个变量的值得状态,第一次是判断函数的参数char c是不是为换行符,然后判断变量RI为0还是非0,最后判断逻辑式SBUF==XOFF是不是成立,然后进入do{}while循环,而循环的退出条件则是逻辑式SBUF不等于XON成立.后面的程序也是大同小异的结构.而你说的有注释的那句OUTPUT CR,这个我没办法帮你解读,因为程序具体是干什么的我不是很清楚.很明显这只是一个工程的一部分,有些变量在程序片段中并没有定义或者声明,所以这个变量的其他使命也难以得之了.呵呵.相信你一定没问题.把程序都看完你就明白了.
再问: 这个不是C语言的系统函数吗? 头文件stdio.h里有printf()函数,而printf函数是有putchar()函数编成的。
再答: /*** *printf.c - print formatted Copyright (c) 1985-2001, Microsoft Corporation. All rights reserved. *Purpose: *******************************************************************************/ #include #include #include #include #include #include #include int __cdecl printf ( const char *format, ... ) /* * stdout 'PRINT', 'F'ormatted */ { va_list arglist; int buffing; int retval; 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编译器是不一样的,接口函数可能是一样的,但是内部的实现方法不同,所以库函数也不一定都相同。