无法理解C中程序的输出

蜜雪儿

编辑:此问题不是重复的,因为在这种情况下行为不是不确定的。

为什么下面的程序在第一行中将输出打印为231?

我对此有两个疑问:

  1. 当我做后缀增量时,在调用max函数之前不应该增加x的值。所以输出应该是第一位的,而不是我认为的2位。我想念什么?

    #define prn(a) printf("%d",a)
    #define print(a,b,c) prn(a), prn(b), prn(c)
    #define max(a,b)  (a<b)? b:a
    
    main()
    {
        int x=1, y=1;
        print(max(x++,y),x,y);
        printf("\n");
        print(max(x++,y),x,y);
    }
    

    输出:

    231
    451
    
  2. 后缀操作是否在执行语句后发生?考虑下面的示例。

    int main()
    {
        int x = 0, y = 1;
        int a = x++ /*x is incremented hereafter?*/+ y;             // line 1
        /* Or x is incremented now after execution of above line?*/ // line 2
        int b = 0;
    }
    
加内什·乔达里·萨达纳拉

让我走这条线

               print(max(x++,y),x,y);

需要注意的重要一点是,C预处理程序是一个宏预处理程序(允许您定义宏),可以在编译程序之前对其进行转换。这些转换可以包括头文件,宏扩展等。

所有预处理指令均以#符号开头。例如,

                #define PI 3.14

告诉编译器在看到的任何地方都将PI替换为3.14。

           c source code->preprocessor->compiler

因此print(max(x ++,y),x,y)在宏中扩展为

           1.      prn((x++<y) ? y:x++), prn(x), prn(y) 

        2. printf("%d",(x++<y)? y:x++), printf("%d",x), printf("%d",y);.

在这里它得到处理,您可以在这里仔细检查两件事

在检查时

               x++<y ,the x++ value is 1

然后x值变成2

所以打印2

然后在打印时我们也写了x ++,这意味着x ++ VALUE是2,但是

之后x值为3

所以3被打印,并且y为1

就是这样

2.TO给你一个很好的直觉和后期增量

让我举个例子

               int x=2;//value of x is 2

               x++;//here x++ value is 2

在此行执行后,x值更改为3

               ++x//here x++ value is 4 and also x value is 4.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章