gpt4 book ai didi

c - printf的原型(prototype)和实现

转载 作者:行者123 更新时间:2023-12-03 21:37:15 26 4
gpt4 key购买 nike

我开始怀疑 printf声明函数时,它总是接收一个字符串作为第一个参数(嗯,const char*),然后其余参数可以是多种类型,它们的数量可变,并以不同的顺序给出。

这是否意味着 printf为每种可能性声明和覆盖函数?这对我来说没有多大意义,所以它真的像这样工作还是完全不同?

还有,这个功能是怎么实现的?如果它太复杂,我只想知道它在内部是如何工作的。

最佳答案

how the printf function is declared



printfvariadic function它自 C99 以来声明如下:
​int printf( const char *restrict format, ... );
^^^
...或省略号表示有可变数量的参数,我们将使用 va_start、va_arg、va_end 宏和 va_list 类型来访问参数。

how is the function implemented?



上面链接的文档中给出了一个非常简单的 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);
}

关于c - printf的原型(prototype)和实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20402382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com