条件运算符"?:"

Dav*_*ixa 4 c conditional-operator

我昨天在C完成了编程考试.有一个问题我无法回答,即使我今天研究过,我也无法想出一个解决方案.

所以我们有这个:

int A= -1 , B= -2, C= -3, X=1;
X = B != C ? A=(~C) - A-- : ++C + (~A);
printf("A= %d  B= %d  C =%d  X=%d \n", A,B,C,X);
Run Code Online (Sandbox Code Playgroud)

我知道这个运算符函数if if X = B != C为true然后A=(~C) - A--执行.如果它是假的,++C + (~A)则执行.

任何人都可以告诉我并解释A,B,C和X的值是printf什么?

这包含在一个问题中,要求对整个程序进行"跟踪":

     #include <stdio.h>
            void main(){
            int A= -1 , B= -2, C= -3, X=1;

        X = B != C ? A=(~C) - A-- : ++C + (~A);
        printf("A= %d  B= %d  C =%d  X=%d \n", A,B,C,X);

if(~A){
        printf("\n out1\n");
        C= A | B
        printf("A= %d  B= %d  C =%d  X=%d \n", A,B,C,X);
        C= C <<1;}

if(A^B){
         printf("\n out2\n");
        C= B & A
        B += 2
        X= X>>1
        printf("A= %d  B= %d  C =%d  X=%d \n", A,B,C,X);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,任何人都可以告诉我这些if条件是什么意思?

hac*_*cks 8

该声明

X = B != C ? A=(~C) - A-- : ++C + (~A);
Run Code Online (Sandbox Code Playgroud)

相当于

if(B != C)
    X = (A = (~C) - (A--));
else 
    X = ++C + (~A);
Run Code Online (Sandbox Code Playgroud)

因此,表达式A = (~C) - (A--)调用未定义的行为.在这种情况下,没有任何好处可以预期.

也就是说,这是一个错误的问题,不应该在考试中提出.或者只要一个选项声明代码将调用未定义的行为,就可以询问多选答案.

  • @chux:未评估的代码不是UB,即使执行时它必然是UB.该标准给出了[例子](http://port70.net/~nsz/c/c11/n1570.html#note118)`2 || 1/0`是一个有效的整数常量表达式,其值为1,而"1/0"部分不会使其成为UB. (3认同)