关于prinf的第一个参数


int widget=1;
printf(widget==1? "%d widget": "%d widgets",widget);

这2条语句可以vs code中通过编译并运行得很好 ——有点不明白
当 我们在源程序中,如上将widget赋值为1,输出为


 1 widget   // 这里没有widget单词后没有s

如果修改一下源程序,将widget赋值为5,输出为


5 widgets   // 这里没有widget单词后加了s

在编译的时候,widget的值并不知道,它怎么编译通过?
printf函数的第1个参数,不是应该是一个字符串吗?而wideget==1? 并不是字符串(没有引号)
也就是说prinf的第1个参数,是一个"条件表达式" 也合法吗?(不会出现语法错误?)
还是要如何理解这个printf这个参数?请教各位?

不管 widget是多少,这个表达式的最终结果 是 字符串,它就符合 printf 的第一个参数的要求

widget==1? "%d widget": "%d widgets"

这是条件语句 a?b:c 的一个简单运用, 当a为真, 则运行b否则运行c

img


谢谢各位的解答,但是还是有点不明白
根据上面vs code 提示的 printf函数的原型,第1个参数应该是一个字符串,
没错,这个表达式的最终结果 是 字符串,但是这个似乎在程序编译后,运行才能得到的结果。
而在程序未运行前,是不是要对这个源程序先进行“编译”
那么在编译时,似乎你这个参数,跟函数原型,要求的字符串不符合呀....
所以它不是应该在“编译”时,就发现“语法错误”之类的东西?
难道在程序编译阶段,就会对这个“条件表达式”进行计算?我的理解好像不会,所以有疑问。。。