xiaofan17 发表于 2019-7-1 14:07:26

C中printf为什么可以写入多个参数?

C语言中既然没有函数重载,为什么printf和csanf可以有多个参数?

newu 发表于 2019-7-1 14:24:02

大致是第一个参数是固定的,后边的称之为可变参数,可变参数被解析为一个字符串,然后对这个字符串中的参数进行提取。。
http://c.biancheng.net/view/344.html

我叫MD 发表于 2019-7-1 15:23:23

小甲鱼后面的视频中好像讲过这个,具体哪个忘记了你自己看看视频

xiaofan17 发表于 2019-7-1 22:16:58

我叫MD 发表于 2019-7-1 15:23
小甲鱼后面的视频中好像讲过这个,具体哪个忘记了你自己看看视频

我也记得谈过但是忘了

xiaofan17 发表于 2019-7-1 22:21:54

newu 发表于 2019-7-1 14:24
大致是第一个参数是固定的,后边的称之为可变参数,可变参数被解析为一个字符串,然后对这个字符串中的参数 ...

有点复杂,没看懂

我就是个弟弟 发表于 2019-7-2 09:25:40

用的是...可变参数,直接从栈中取参数。

迷雾少年 发表于 2019-7-5 12:59:43

printf 调用协定是cdecl 调用者自己恢复栈平衡 你谁调用的printf传了多少个参数是知道的所以add esp,X其中X你自己是知道的然后printf函数里 根据第二个参数字符串 去解析需要用到后面多少个参数 然后自己用栈里取 表示printf第一个参数 代表printf第三个参数 代表printf第四个参数 以此类推实现变长

AmosAlbert 发表于 2019-7-17 14:48:13

在c语言中,编译器在编译后在库中的名字为_function,在c++中,编译器在编译后在库中的名字为_function_int_int。重载本质上还是函数重载,而printf与scanf也是函数,相当于函数调用函数。一个函数多次调用一个函数,但每次的类型不同,不相当于重载吗?

AmosAlbert 发表于 2019-7-19 11:07:34

嘻嘻嘻,谢谢将我设置为最佳答案,鱼c有你更精彩
页: [1]
查看完整版本: C中printf为什么可以写入多个参数?