﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-开心就好-文章分类-arm in linux</title><link>http://www.cppblog.com/shaovie/category/2837.html</link><description>做最好的自己</description><language>zh-cn</language><lastBuildDate>Tue, 27 May 2008 15:56:00 GMT</lastBuildDate><pubDate>Tue, 27 May 2008 15:56:00 GMT</pubDate><ttl>60</ttl><item><title>编写适合自己需要的printf()函数</title><link>http://www.cppblog.com/shaovie/articles/13779.html</link><dc:creator>崔少伟</dc:creator><author>崔少伟</author><pubDate>Tue, 17 Oct 2006 08:32:00 GMT</pubDate><guid>http://www.cppblog.com/shaovie/articles/13779.html</guid><wfw:comment>http://www.cppblog.com/shaovie/comments/13779.html</wfw:comment><comments>http://www.cppblog.com/shaovie/articles/13779.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shaovie/comments/commentRss/13779.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shaovie/services/trackbacks/13779.html</trackback:ping><description><![CDATA[
		<font color="#0066ff">引自<a href="http://www.zdnet.com.cn/developer/code/story/0,3800066897,39155056-2,00.htm">http://www.zdnet.com.cn/developer/code/story/0,3800066897,39155056-2,00.htm</a><br />#include &lt;stdarg.h&gt;<br /><br />intprintf(const char *fmt, ...)<br />{<br />    const char *s;<br />    int d;<br />    char buf[16];<br />    va_listap;<br />    va_start(ap, fmt);<br />    while (*fmt) {<br />        if (*fmt != '%') {<br />            putchar(*fmt++);<br />            continue;<br />        }<br />        switch (*++fmt) {<br />            case 's':<br />                s = va_arg(ap, const char *);<br />                for ( ; *s; s++) {<br />                    putchar(*s);<br />                }<br />                break;<br />            case 'd':<br />                d = va_arg(ap, int);<br />                itoa(d, buf, 10);<br />                for (s = buf; *s; s++) {<br />                    putchar(*s);<br />                }<br />                break;<br />            /* Add other specifiers here... */              <br />            default:  <br />                putchar(*fmt);<br />                break;<br />        }<br />        fmt++;<br />    }<br />    va_end(ap);<br />    return 1;   /* Dummy return value */<br />}<br /><p align="left">下面是一些值得注意的事情：</p><ul type="disc"><li>为了节省空间，这个简单的printf()只支持“%s”和“%d”格式的分类符，而不需要任何指示器或者其他调节器。扩展这个函数以支持其他分类符是相对较简单的。</li><li>C语言的标准要求printf()应该返回输出字符串的数量。这个被返回的值通常被忽略掉了，所以这个轻型的printf()就不会劳心去计算它了，而是返回一个伪值。</li><li>一般来说，putchar()这个函数会将字符发送到串口，更通行的方法是通过由中断驱动的串口输出缓冲区以避免延迟。</li><li>首标文件&lt;stdarg.h&gt;是一个标准的库首标文件，它为访问传递给printf()的变量自变量列表提供小巧的宏，通常是通过系统堆栈。</li></ul></font>
<img src ="http://www.cppblog.com/shaovie/aggbug/13779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shaovie/" target="_blank">崔少伟</a> 2006-10-17 16:32 <a href="http://www.cppblog.com/shaovie/articles/13779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>