标准C库中定义的printf()
函数的函数定义是什么?
我需要定义来解决以下问题:
输出以下内容:
int main() { int a = 2; int b = 5; int c = 10; printf("%d ",a,b,c); return 0; }
答案 0 :(得分:9)
C语言标准声明printf
如下:
int printf(const char *format, ...);
它返回一个整数,并获取指向常量字符的指针的第一个参数和任意类型的任意数量的后续参数。
如果您传递的参数多于传入的格式字符串所需的参数,则会忽略额外的参数(尽管仍会对其进行评估)。根据C89标准§4.9.6.1:
如果有的话 格式的参数不足,行为未定义。 如果参数保留时格式已用尽,则超出 参数被评估(一如既往)但被忽略。
答案 1 :(得分:4)
您传递一个字符数组(或指针)作为第一个参数(包括format placeholders)和要替换为字符串的其他参数。
您的示例的输出将是2
1 到标准输出。 %d
是带符号十进制整数的占位符。额外的空间将按字面意思,因为它不是有效的占位符。 a
作为第一个占位符参数传递,并且已分配2
。不会检查额外的参数(见下文)。
printf()
是variadic function,只通过计算第一个参数中的占位符来了解其附加参数的数量。
1 Markdown不允许在内联代码示例中使用尾随空格。我不得不使用备用空间,但您将看到的空间将是正常空间(ASCII 0x20)。
答案 2 :(得分:1)
man 3 printf
给出了......
int printf(const char *restrict format, ...);
答案 3 :(得分:0)
将标准输出(stdout)写入格式为format参数指定的数据序列。在format参数之后,该函数至少需要格式化指定的附加参数。
%d =有符号十进制整数
答案 4 :(得分:0)
及其
int printf(const char *format, ...);
format
是指向格式字符串
...
是省略号运算符,您可以使用该运算符传递可变数量的参数,这取决于格式字符串中占位符的数量。
返回值是打印的字符数
在这里查看省略号运算符:http://bobobobo.wordpress.com/2008/01/28/how-to-use-variable-argument-lists-va_list/
答案 5 :(得分:0)
printf("%d ",a,b,c);
对于每个%(something)
,您需要添加一个引用变量,因此
printf("%d ",a+b+c); //would work (a+b+c), best case with (int) before that
printf("%d %d %d",a,b,c); //would print all 3 integers.