Ò׽ؽØÍ¼Èí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB

¶Ô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)


Ïà¹ØÎĵµ£º

emacs ¿ì½Ý¼ü£¨°üÀ¨C£¯C++ģʽ£©

·ûºÅ
      C-  Òâ˼Êǰ´×¡ Ctrol ¼ü
M-   ÒâÖ¸ Meta ¼ü (¼üÅÌÉÏÈôÎÞMeta ¼ü£¬Ôò¿ÉÒÔALT ESC ¼üÀ´È¡¶ø´úÖ®)
DEL  ÒâÖ¸Í˸ñ¼ü (²»ÊÇ É¾³ý(Delete) key)
RET  ÒâÖ¸»Ø³µ¼ü
SPC  ÒâÖ¸¿Õ¸ñ¼ü
ESC  ÒâÖ¸Escape¼ü
TAB  ÒâÖ¸Tab¼ü
Ïñ "C-M-" (or "M-C") ......

½â¶Á¸´ÔÓµÄC/C++ÉùÃ÷[ÈëÃÅÆª]

¸´ÔÓµÄC\C++ÉùÃ÷£¬³£³öÏÖÔÚѧУµÄ¿¼¾í£¬ÃæÊÔÌâ»òÊÇÅ£ÈËÀÏÍâµÄ´úÂëÖС£
ÎÒÃÇÔÚʵ¼ÊµÄ¹¤×÷ÖУ¬Ó¦¸Ã¾¡¿ÉÄÜÉÙʹÓø´ÔÓµÄÉùÃ÷¡£¸´ÔÓµÄÉùÃ÷£¬»áÈÃÔĶÁÄú´úÂëµÄÈ˺ÜÊÇÓôÃÆ¡£
ËäÈ»²»Ê¹ÓÃÕâÖÖ¸´ÔÓµÄÉùÃ÷£¬µ«»¹ÊÇÓ¦¸Ã°Ñ½«ÈçºÎ½âÎöÕâÖÖ¸´ÔÓµÄÉùÃ÷µÄ·½·¨¼ÇÔÚÐÄÖС£
ËùÒÔ£¬ÎÒ°ÑÕâÖÖ·½·¨¼Ç¼ÏÂÀ´£¬ÒÔ±¸²»Ê±Ö®Ðè¡£
ÈëÃÅÌâ
1) Ò»¸öÕûÐ ......

C²Ù×÷·ûµÄÓÅÏȼ¶ºÍ¹ØÁª¹æÔò

C²Ù×÷·ûµÄÓÅÏȼ¶ºÍ¹ØÁª¹æÔò
²Ù×÷·û
¹ØÁª¹æÔò
¹ØÁª²Ù×÷·û ()  []  ->  .
´Ó×óµ½ÓÒ
Ò»Ôª²Ù×÷·û  !  –  ++  --  +  -  (type)  *  &  sizeof
´ÓÓÒµ½×ó
³Ë·¨ºÍ³ý·¨  *  /  %
´Ó×óµ½ÓÒ
¼Ó·¨ºÍ¼õ·¨  +  -
´Ó× ......

C/C++Ô¤´¦Àí ISO/ANSI C±ê×¼ÒëÎÄÓë×¢½â

C/C++Ô¤´¦Àí ISO/ANSI C±ê×¼ÒëÎÄÓë×¢½â
http://blog.csdn.net/huyansoft/archive/2008/05/26/2484297.aspx
<<ISO/ANSI C±ê×¼ÒëÎÄÓë×¢½â C/C++Ô¤´¦Àí²¿·Ö>>
ÄÚÈݼò½é£º±¾ÎĵµÍêÕû·­ÒëÁËC±ê×¼(99°æ)ÖÐÔ¤´¦ÀíºÍÏà¹ØÕ½ڵÄÄÚÈÝ£¬²¢ÔÚÐí¶à±ØÒªÖ®´¦¸½¼ÓÁË×¢½âºÍ³ÌÐòʾÀý£¬ÒÔ°ïÖú¶ÁÕßÀí½â±ê×¼Ô­ÎÄ£¬Í¬Ê±ÖÆ×÷ÁËÏêϸµ ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ