c - 如何理解 C 中 printf 语句的行为?

标签 c

我遇到了两个 C 能力问题。

main()
{
  int x=4,y,z;
  y=--x;
  z=x--;
  printf("\n%d %d %d",x,y,z);
}

输出:2 3 3(从左到右打印)

main()
{
 int k=35;
 printf("\n%d %d %d",k==35,k=50,k>40);
}

输出:0 50 0(从右到左打印)

为什么会这样?我在 Stack Overflow 上看到了很多类似的答案。人们回答这是未定义的行为,但如果在面试中提出这个问题,应该如何回答?

最佳答案

C 中任何函数的参数求值顺序没有任何特定顺序。看起来您被问到的平台/编译器可能正在从右到左评估函数参数,这将打印出您获得的结果,但是 C 标准说您不知道顺序,所以这里显示的是什么是未定义的行为,几乎肯定会在不同的编译器或平台上获得不同的结果。

请注意,在您的函数中,所有变量值都在调用 printf() 之前赋值 - 而在您的 main() 中,值被赋值给变量在 printf() 的参数列表中。

关于c - 如何理解 C 中 printf 语句的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50532818/

相关文章:

c - "\t\r\n\a"代表什么?

c - 使用共享内存时如何处理被杀(kill -9)?

c - 如何获取我连接的接口(interface)

c - 在C中将字符串写入文本文件(文件开头有额外的空格)

在 C 中将大写字母转换为小写字母..(具有挑战性的)

c - 我正在尝试运行这个简单的程序,但在 "expected ‘=’ token 之前出现此错误消息 ‘,’ 、 ‘;’ 、 ‘asm’ 、 ‘__attribute__’ 或 ‘<’ ”

java - Vorbis查找文件的解压缩大小

c - 当应用程序崩溃或被操作系统杀死时内存中会发生什么

c - JNI - 遇到 "[lib].dll: Can' t 查找依赖库时如何查找丢失的库”

c - OMP 2.0 嵌套 For 循环