c - printf 中的评估顺序和打印

标签 c printf

我见过有关 i++++i 等的问题,但我有一个小问题,有些不同。 假设我有这样的事情:

 printf("%d %d", P, P);

P 是一个函数

 int P(){
      printf("HEY");
      return 0;
 }

将打印什么 嘿嘿00还是嘿0嘿0?

最佳答案

运行它即可。

这个程序:

#include <stdio.h>

int P(){
  printf("HEY");
  return 0;
}
int main() {
  printf("%d %d", P(), P());
  return 0;
}

输出:

HEYHEY0 0
为什么?在实际输入 printf 的代码之前,将对参数进行求值(调用 P)。

编辑:根据@Shafik下面的说法,C标准保证参数求值的顺序,所以如果有两个具有不同字符串的函数,这些字符串的顺序将不会不可预测。

关于c - printf 中的评估顺序和打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22792141/

相关文章:

c - 如何在函数之间传递数组

c - 时钟时间和墙上时间有什么区别?

linux - ASM printf : no output if string doesn't include\n newline

c - 为什么printf只接受多个 "%"?

c - 如何从 C 中的主函数打印 argv 参数?

从打印更改为写入文件 c

c - gdb 打印到文件

c++ - 使用散列合并全局内存写入

c++ - 如何部署C静态库: header + c file or object file?

c - 按位运算符