- 论坛徽章:
- 14
|
为什么不用 va_arg 等可移植的代码?- #include <stdio.h>
- #include <stdarg.h>
- int vprintk( const char *fmt, va_list args )
- {
- int ret = 0;
- for( const char* p=fmt; *p; ++p )
- {
- if( *p != '%' )
- {
- putchar( *p );
- ++ret;
- continue;
- }
- if( *++p == '\0' )
- break;
- switch( *p )
- {
- case 'x':
- ret += printf( "%x", va_arg(args,unsigned int) );
- break;
- case 's':
- ret += printf( "%s", va_arg(args,const char*) );
- break;
- }
- }
- return ret;
- }
- int printk( const char *fmt, ... )
- {
- va_list args;
- va_start(args, fmt);
- int n = vprintk( fmt, args );
- va_end( fmt );
- return n;
- }
- int main()
- {
- int n = printk( "ABC - %s, DEF - %x\n", "abc", 123 );
- printf( "%d\n", n );
- return 0;
- }
复制代码 |
|