¶ÔCµÄprintfº¯ÊýµÄ¿É±ä³¤²ÎÊýʵÏֵķÖÎö
ת×Ô¡¾http://tech.ddvip.com/2008-08/121825219252306_3.html¡¿
ÄÚÈÝÕªÒª£ºÒ»Ö±ÒÔÀ´¶¼¾õµÃprintfËƺõÊÇcÓïÑÔ¿âÖй¦ÄÜ×îÇ¿´óµÄº¯ÊýÖ®Ò»£¬²»½öÒòΪËüÄܸñʽ»¯Êä³ö£¬¸üÔÚÓÚËüµÄ²ÎÊý¸öÊýûÓÐÏÞÖÆ£¬Òª¼¸¸ö¾Í¸ø¼¸¸ö£¬À´Õß²»¾Ü¡£printfÕâÖÖ¶Ô²ÎÊý¸öÊýºÍ²ÎÊýÀàÐ͵ÄÇ¿´óÊÊÓ¦ÐÔ£¬ÈÃÈ˲úÉúÁ˶ÔËü½øÐÐ̽Ë÷µÄŨºñÐËȤ¡£
¡¾1. ʹÓÃÇéÐÎ ¡¿
int a =10;
double b = 20.0;
char *str = "Hello world";
printf("begin print
");
printf("a=%d, b=%.3f, str=%s", a, b, str);
...
´ÓprintfµÄʹÓÃÇé¿öÀ´¿´£¬ÎÒÃDz»ÄÑ·¢ÏÖÒ»¸ö¹æÂÉ£¬¾ÍÊÇÎÞÂÛÆä¿É±äµÄ²ÎÊýÓжàÉÙ¸ö£¬printfµÄµÚÒ»¸ö²ÎÊý×ÜÊÇÒ»¸ö×Ö·û´®¡£¶øÕýÊÇÕâµÚÒ»¸ö²ÎÊý£¬Ê¹µÃËü¿ÉÒÔÈ·ÈϺóÃ滹ÓÐÓжàÉÙ¸ö²ÎÊýβËæ¡£¶øβËæµÄÿ¸ö²ÎÊýÕ¼ÓõÄÕ»¿Õ¼ä´óСÓÖÊÇͨ¹ýµÚÒ»¸ö¸ñʽ×Ö·û´®È·¶¨µÄ¡£È»¶øprintfµ½µ×ÊÇÔõÑùÈ¡µÚÒ»¸ö²ÎÊýºóÃæµÄ²ÎÊýÖµµÄÄØ£¬Çë¿´ÈçÏ´ú¡£
¡¾2. printf º¯ÊýµÄʵÏÖ¡¿
//acenv.h
typedef char *va_list;
#define¡¡_AUPBND¡¡¡¡¡¡¡¡(sizeof (acpi_native_int) - 1)
#define¡¡_ADNBND¡¡¡¡¡¡¡¡(sizeof (acpi_native_int) - 1)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
#define _bnd(X, bnd)¡¡¡¡(((sizeof (X)) + (bnd)) & (~(bnd)))
#define va_arg(ap, T)¡¡ (*(T *)(((ap) += (_bnd (T, _AUPBND))) - (_bnd (T,_ADNBND))))
#define va_end(ap)¡¡¡¡¡¡(void) 0
#define va_start(ap, A) (void) ((ap) = (((char *) &(A)) + (_bnd (A,_AUPBND))))
//start.c
static char sprint_buf[1024];
int printf(char *fmt, ...)
{
¡¡¡¡va_list args;
¡¡¡¡int n;
¡¡¡¡va_start(args, fmt);
¡¡¡¡n = vsprintf(sprint_buf, fmt, args);
¡¡¡¡va_end(args);
¡¡¡¡write(stdout, sprint_buf, n);
¡¡¡¡return n;
}
//unistd.h
static inline long write(int fd, const char *buf, off_t count)
{
¡¡¡¡return sys_write(fd, buf, count);
}
¡¾3. ·ÖÎö¡¿
´ÓÉÏÃæµÄ´úÂëÀ´¿´£¬printfËƺõ²¢²»¸´ÔÓ£¬Ëüͨ¹ýÒ»¸öºêva_start°ÑËùÓеĿɱä²ÎÊý·Åµ½ÁËÓÉargsÖ¸ÏòµÄÒ»¿éÄÚ´æÖУ¬È»ºóÔÙµ÷ÓÃvsprintf. ÕæÕýµÄ²ÎÊý¸öÊýÒÔ¼°¸ñʽµÄÈ·¶¨ÊÇÔÚvsprintf¸ã¶¨µÄÁË¡£ÓÉÓÚvsprintfµÄ´úÂë±È½Ï¸´ÔÓ£¬Ò²²»ÊÇÎÒÃÇÕâÀïÒªÌÖÂÛµÄÖص㣬ËùÒÔÏÂÃæ¾Í²»ÔÙÁгöÁË¡£ÎÒÃÇÕâÀïÒªÌÖÂÛµÄÖصãÊÇva_start(ap, A)ºêµÄʵÏÖ£¬Ëü¶Ô¶¨Î»´Ó²ÎÊýAºóÃæµÄ²ÎÊýÓÐÖØ´óµÄÖƵ¼ÒâÒå¡£ÏÖÔÚ°Ñ #define va_start(ap, A)
Ïà¹ØÎĵµ£º
µÚÒ»Õ¸ÅÀÀ
CÊÇÒ»ÖÖ±àÒëÐ͵ÄÓïÑÔ
±àÒëÐÍ£º¾ÍÊÇ°ÑcÓïÑÔ±àÒë³É¼ÆËã»úÄÜÔËÐеĻúÆ÷´úÂë
²»Í¬µÄ¼ÆËã»úϵͳÓÐן÷×ԵıàÒëÆ÷£¬À´°Ñc±àÒë³É¶ÔÓ¦µÄ»úÆ÷´úÂë
ÌØÐÔ£º´úÂë¸ßЧ£¬¿ÉÒÆÖ²£¬¹¦ÄÜÇ¿´óºÍÁé»î
ȱµã£º´úÂë¸ñʽ×ÔÓÉ£¨ÌرðÊÇÖ¸ÕëµÄʹÓã©
CÓïÑÔÔËÐеÄÆ߸ö²½Ö裺
1. ¶¨Ò ......
¶ÔÓÚÔÓïÀàÐ͵ÄÊý×飬Èçint[] a,ÔÚCÀïÃæÖ»ÒªÕâÑù¶¨ÒåÖ®ºó¾Í¿ÉÒÔÓÃa[i]ʹÓÃÁË£¬µ«ÊÇÔÚJAVAÀïÃæÊDz»Ðеģ¬±ØÐëÓÃint[] a = new int[LENGTH];À´ÎªÊý×é·ÖÅä¿Õ¼ä¡£ÕâÀïµÄa¸üÓ¦¸Ã¿´³ÉCÀïÃæµÄÖ¸Õ룬ËüºÍCÀïÃæµÄint* aÊÇÒ»ÑùµÄ£¬ÒòΪÕâ¸öa£¨CÀïÃæµÄ£©Ò²ÒªÏÈmallocÒ»¸ö¿Õ¼äÖ®ºó²Å¿ ......
ºÏ²¢ÅÅÐò£¨MERGE SORT£©ÊÇÓÖÒ»À಻ͬµÄÅÅÐò·½·¨£¬ºÏ²¢µÄº¬Òå¾ÍÊǽ«Á½¸ö»òÁ½¸öÒÔÉϵÄÓÐÐòÊý¾ÝÐòÁкϲ¢³ÉÒ»¸öеÄÓÐÐòÊý¾ÝÐòÁУ¬Òò´ËËüÓֽй鲢Ëã·¨¡£ËüµÄ»ù±¾Ë¼Ïë¾ÍÊǼÙÉèÊý×éAÓÐN¸öÔªËØ£¬ÄÇô¿ÉÒÔ¿´³ÉÊý×éAÊÇÓÖN¸öÓÐÐòµÄ×ÓÐòÁÐ×é³É£¬Ã¿¸ö×ÓÐòÁеij¤¶ÈΪ1£¬È»ºóÔÙÁ½Á½ºÏ²¢£¬µÃµ½ÁËÒ»¸ö N/2 ¸ö³¤¶ÈΪ2»ò1µÄÓÐÐò×ÓÐòÁУ¬ÔÙÁ½Á½ ......
<<ISO/ANSI C±ê×¼ÒëÎÄÓë×¢½â C/C++Ô¤´¦Àí²¿·Ö>>
ÄÚÈݼò½é£º±¾ÎĵµÍêÕû·ÒëÁËC±ê×¼(99°æ)ÖÐÔ¤´¦ÀíºÍÏà¹ØÕ½ڵÄÄÚÈÝ£¬²¢ÔÚÐí¶à±ØÒªÖ®´¦¸½¼ÓÁË×¢½âºÍ³ÌÐòʾÀý£¬ÒÔ°ïÖú¶ÁÕßÀí½â±ê×¼ÔÎÄ£¬Í¬Ê±ÖÆ×÷ÁËÏêϸµÄÖÐÓ¢ÎÄË÷Òý±¸²é¡£
ÒëÕߣººúÑå
³ö´¦£ºhttp://blog.csdn.net/huyansoft
Èç¹ûתÔØ£¬Çë±£ÁôÒëÕߺͳö´¦ÐÅÏ¢£¬Ð ......
×Ô¼ºÐ´µÄC/C++±àÒëÆ÷Doctors[Èí¼þ+Îĵµ]
http://blog.csdn.net/huyansoft/archive/2009/08/20/4464772.aspx
¸üа汾1.0.1£º¸Ã°æ±¾½â¾öÁË֮ǰ1.0.0°æ±¾ÖÐÕÒ²»µ½Á´½Ó¿âlibc.libµÄÎÊÌ⣬ÒÔ¼°IDEϵã»÷Project²Ëµ¥³öÏÖµÄBUG¡£ÏÂÔصØÖ·£ºhttp://download.csdn.net/source/1597132
Doctors±àÒëÆ÷ÄÚ²¿ÊµÏÖ
For version 1.0.1 ......