我想知道以下语句在 C 中会打印什么?
printf("hello\n") || (printf("goodbye\n") || printf("world\n"));
我通常习惯使用“cout”在 C 中打印一些内容。此外,我对这种方式使用的管道和双管道运算符感到困惑。谢谢你!
First, cout
是 C++ 的发明,从未回到 C,也永远不会。
Next, printf
返回打印的字符数,因此第一次调用返回非零。
As ||
是短路布尔值,或者,以下都不是printf
- 通话将会完成。
(|
是按位或,因此不会短路。添加是因为您正在谈论单管道并且@Leeor链接了这样的问题。)
最终结果:hello\n
打印:5个字符+换行符(将被翻译,如stdin
是文本模式(Unixoid 上的身份转换))。
7.21.6.3 printf 函数
概要
#include <stdio.h>
int printf(const char * restrict format, ...);
描述
2 的printf
函数相当于fprintf
与论证stdout
介入
在参数之前printf
.
退货
3 的printf
函数返回传输的字符数,如果是则返回负值
发生输出或编码错误。
6.5.12 按位或运算符
Synopsis
[...]
约束条件
2 每个操作数应为整数类型。
语义学
3 对操作数进行通常的算术转换。
4 结果|
运算符是操作数的按位或运算(即,
当且仅当转换后的数据中至少有一个相应位时,结果才被设置
操作数已设置)。
6.5.14 逻辑或运算符
Synopsis
[...]
约束条件
2 每个操作数应具有标量类型。
语义学
3 的||
如果任一操作数不等于 0,则运算符应产生 1;否则,它
产生 0。结果具有类型int
.
4 与按位运算不同|
运营商,||
运算符保证从左到右评估;如果
第二个操作数被求值,第一个操作数的求值之间有一个序列点
和第二操作数。如果第一个操作数比较不等于 0,则第二个操作数为
未评价。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)