You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言printf函数参数求值顺序及输出结果解析

C语言printf参数执行顺序导致的输出问题

原代码

#include<stdio.h>

int main()
{
    printf("%d %d", printf("Hello World"), printf("New World"));
}

实际运行输出

New WorldHello World11 9

原因解释

问题的核心在于C语言标准没有规定函数参数的求值顺序,不同编译器可自行实现参数计算顺序,目前主流编译器(比如GCC、Clang)默认采用从右到左的顺序处理函数参数:

  • 外层printf有两个参数:printf("Hello World") 和 printf("New World"),编译器会优先计算右侧参数
  • 先执行printf("New World"):输出字符串New World,该printf的返回值是输出的字符总数("New World"含9个字符,包括空格)
  • 再执行printf("Hello World"):输出字符串Hello World,返回值是11("Hello World"含11个字符,包括空格)
  • 最后外层printf将两个返回值按%d %d格式输出,即11 9
  • 把所有输出内容拼接起来,就得到最终结果New WorldHello World11 9

补充说明:如果换用其他编译器(比如部分老版本VC),可能采用从左到右的参数求值顺序,输出会变成Hello WorldNew World11 9,这同样符合C语言标准,因为标准并未强制参数的计算顺序。

内容的提问来源于stack exchange,提问作者Thang Tons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:44:55