为什么这个printf语句不会产生书中示例中显示的输出?

Joh*_*ohn 3 c printf

int j=5,k=9;
printf("%d...%d");
Run Code Online (Sandbox Code Playgroud)

这个问题出现在一本书中.给出的输出:5 9但是当我尝试这个时我得到了:垃圾值,请向我解释一下.书中的解释说printf取得了程序前两个赋值的值

sar*_*old 10

你的书作者依赖于愚蠢的行为.(我不知道这是否是undefined或implementation defined或just plain stupid).

他们依靠你的堆栈分配j和k变量神奇地在那里printf(3)被调用.由于printf(3)将利用其格式字符串,以确定哪些类型的多少对象看,它会神奇地解释j和k变量,位于栈上,作为论据来printf(3),仿佛他们已经传递给它的故意.

这太依赖于"幕后如何运作"的魔力.除非这个代码块被"这段代码可能会显示给你......"和"永远不做这个愚蠢的事......"所包围,否则这本书可能不值得再读了.