printf的原型和实现

 展翅翱翔512 发布于 2023-02-12 17:10

我开始想知道printf函数是如何声明的,它总是接收一个字符串作为第一个参数(好吧,const char*),然后其余参数可以是各种类型,它们的数量可变并且以不同的顺序给出。

这是否意味着printf针对每种可能性都对函数进行了声明和覆盖?这对我来说意义不大,所以它真的像这样工作还是与众不同?

另外,该功能如何实现?如果太复杂了,我只想知道它在内部一般是如何工作的。

1 个回答
  • 如何声明printf函数

    printf是一个可变参数函数,自C99起它声明如下:

    ?int printf( const char *restrict format, ... );
                                             ^^^
    

    ...或省略号表示有争论的可变号码,我们将使用的va_start在va_argva_end用来宏和va_list的类型来访问这些参数。

    该功能如何实现?

    上面链接的文档中给出了一个非常简单的printf的示例,如下所示,并对其进行了修改以在C中工作:

    #include <stdio.h>
    #include <stdarg.h>
    
    void simple_printf(const char *fmt, ...)
    {
        va_list args;
        va_start(args, fmt);
    
        while (*fmt != '\0') {
            if (*fmt == 'd') {
                int i = va_arg(args, int);
                printf( "%d\n", i ) ;
            } else if (*fmt == 'c') {
                int c = va_arg(args, int);
                printf( "%c\n", (char)c ) ;
            } else if (*fmt == 'f') {
                double d = va_arg(args, double);
                printf( "%f\n", d ) ;
            }
            ++fmt;
        }
    
        va_end(args);
    }
    
    int main()
    {
        simple_printf("dcff", 3, 'a', 1.999, 42.5); 
    }
    

    2023-02-12 17:12 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有