【发布时间】:2012-10-27 15:45:16
【问题描述】:
在汇编语言的世界里,当你调用printf()时,你会这样做:
push arg_N
push arg_N-1
..
push arg1
push format
call _printf
但是这里的printf() 怎么知道传入了多少个参数呢?
【问题讨论】:
-
printf 分析格式字符串以了解有多少参数以及预期的类型。这也是为什么不匹配的格式字符串和参数会导致非常奇怪的问题。
-
它没有,这就是为什么如果你不保持你的参数和你的格式字符串同步它可能是不安全的。格式字符串就是他们所要做的。
-
请注意,它甚至不能在被调用者弹出参数的调用约定中实现(例如 _pascal)。只有调用者可以知道有多少参数。
标签: c assembly compiler-construction printf